高并发场景下(用户较多),如何使用多线程?怎么样才能让效率提高呢?

abcd7038 2020-06-27 05:41:55
就是这样子的:
假如说我现在有很多人同时登陆我的网站,
同时我想让效率比较高,
那么请问在尽可能用比较少的计算机的情况下,
应该用什么样的锁,什么样的结构来管理各个线程呢?
希望有大神可以给点思路~~~
也可以给点示例~~~
...全文
640 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
abcd7038 2020-07-12
  • 打赏
  • 举报
回复
引用 9 楼 sdhexu 的回复:
这就是c++的
感谢您提供的数据
abcd7038 2020-07-11
  • 打赏
  • 举报
回复
引用 7 楼 sdhexu 的回复:
[quote=引用 5 楼 abcd7038 的回复:][quote=引用 4 楼 sdhexu 的回复:] 完成端口+线程池。目前效率最高的通信模型,没有之一。。 但高并发是个整体系统,单靠一种技术是行不通的。 前置,使用反向代理,将静态请求数据和动态请求数据分离,静态请求就是请求图片、代码、UI等静态的数据,动态请求就是需要计算才能知道结果的请求,静态请求直接从静态服务器中返回结果即可。对于动态请求,再进行负载均衡,将请求分发到计算服务器上,服务器使用完成端口+线程池的通信模型来写,当然,完成端口只支持windows,如果不是windows,那就考虑go语言等等。。。。
那么线程池主要是什么?[/quote] 线程池的意义在于:首先你要明白一个真理,针对一个CPU(单核),同一个时刻只能运行一个线程,你只所以看上去好多程序一起运行,那是因为他进行了分时处理,就是说运行线程A一段时间,然后保护好现场,在运行B线程一段时间,在不同的线程之间来回切换,使得你感觉上好像很多线程在同时运行。。当你线程数量达到一定阈值,在线程之间来回切换需要的时间,比线程工作的时间都大了,就是说CPU光忙着保护线程现场、恢复现场等操作,光忙着线程切换了,干正事的时间就少了。整体效率反而会下降。。 那么线程池就是为了解决上面的问题的。一般来说,一个CPU可以运行2-3个线程,于是你的CPU是几核的,或者说你有几个CPU,那你就事先创建好CPU数*2~3个线程,这些线程的数量根据CPU核心数和CPU个数来,调整到最佳状态。当有任务需要处理时,从线程池中唤醒一个线程,去执行你的任务,任务完成后,线程会休眠,回到线程池中。。 这样效率就高了。 线程池的使用:https://blog.csdn.net/sdhexu/article/details/38020861[/quote] 您这个的应该是Java或者其他语言的,有没有一些C++的可以参考一下?
引用 9 楼 sdhexu 的回复:
这就是c++的
OK,谢谢!
示申○言舌 2020-07-06
  • 打赏
  • 举报
回复
这就是c++的
ztenv 版主 2020-07-06
  • 打赏
  • 举报
回复
这是一个很大的话题 了
abcd7038 2020-07-03
  • 打赏
  • 举报
回复
引用 7 楼 sdhexu 的回复:
[quote=引用 5 楼 abcd7038 的回复:][quote=引用 4 楼 sdhexu 的回复:] 完成端口+线程池。目前效率最高的通信模型,没有之一。。 但高并发是个整体系统,单靠一种技术是行不通的。 前置,使用反向代理,将静态请求数据和动态请求数据分离,静态请求就是请求图片、代码、UI等静态的数据,动态请求就是需要计算才能知道结果的请求,静态请求直接从静态服务器中返回结果即可。对于动态请求,再进行负载均衡,将请求分发到计算服务器上,服务器使用完成端口+线程池的通信模型来写,当然,完成端口只支持windows,如果不是windows,那就考虑go语言等等。。。。
那么线程池主要是什么?[/quote] 线程池的意义在于:首先你要明白一个真理,针对一个CPU(单核),同一个时刻只能运行一个线程,你只所以看上去好多程序一起运行,那是因为他进行了分时处理,就是说运行线程A一段时间,然后保护好现场,在运行B线程一段时间,在不同的线程之间来回切换,使得你感觉上好像很多线程在同时运行。。当你线程数量达到一定阈值,在线程之间来回切换需要的时间,比线程工作的时间都大了,就是说CPU光忙着保护线程现场、恢复现场等操作,光忙着线程切换了,干正事的时间就少了。整体效率反而会下降。。 那么线程池就是为了解决上面的问题的。一般来说,一个CPU可以运行2-3个线程,于是你的CPU是几核的,或者说你有几个CPU,那你就事先创建好CPU数*2~3个线程,这些线程的数量根据CPU核心数和CPU个数来,调整到最佳状态。当有任务需要处理时,从线程池中唤醒一个线程,去执行你的任务,任务完成后,线程会休眠,回到线程池中。。 这样效率就高了。 线程池的使用:https://blog.csdn.net/sdhexu/article/details/38020861[/quote] 您这个的应该是Java或者其他语言的,有没有一些C++的可以参考一下?
示申○言舌 2020-07-02
  • 打赏
  • 举报
回复
引用 5 楼 abcd7038 的回复:
[quote=引用 4 楼 sdhexu 的回复:] 完成端口+线程池。目前效率最高的通信模型,没有之一。。 但高并发是个整体系统,单靠一种技术是行不通的。 前置,使用反向代理,将静态请求数据和动态请求数据分离,静态请求就是请求图片、代码、UI等静态的数据,动态请求就是需要计算才能知道结果的请求,静态请求直接从静态服务器中返回结果即可。对于动态请求,再进行负载均衡,将请求分发到计算服务器上,服务器使用完成端口+线程池的通信模型来写,当然,完成端口只支持windows,如果不是windows,那就考虑go语言等等。。。。
那么线程池主要是什么?[/quote] 线程池的意义在于:首先你要明白一个真理,针对一个CPU(单核),同一个时刻只能运行一个线程,你只所以看上去好多程序一起运行,那是因为他进行了分时处理,就是说运行线程A一段时间,然后保护好现场,在运行B线程一段时间,在不同的线程之间来回切换,使得你感觉上好像很多线程在同时运行。。当你线程数量达到一定阈值,在线程之间来回切换需要的时间,比线程工作的时间都大了,就是说CPU光忙着保护线程现场、恢复现场等操作,光忙着线程切换了,干正事的时间就少了。整体效率反而会下降。。 那么线程池就是为了解决上面的问题的。一般来说,一个CPU可以运行2-3个线程,于是你的CPU是几核的,或者说你有几个CPU,那你就事先创建好CPU数*2~3个线程,这些线程的数量根据CPU核心数和CPU个数来,调整到最佳状态。当有任务需要处理时,从线程池中唤醒一个线程,去执行你的任务,任务完成后,线程会休眠,回到线程池中。。 这样效率就高了。 线程池的使用:https://blog.csdn.net/sdhexu/article/details/38020861
qq_40162781 2020-07-02
  • 打赏
  • 举报
回复
引用 5 楼 abcd7038 的回复:
[quote=引用 4 楼 sdhexu 的回复:]
提前把多个线程创建好,要使用的时候直接把执行的任务推过去执行,避免创建和释放线程资源的开销
abcd7038 2020-07-01
  • 打赏
  • 举报
回复
引用 4 楼 sdhexu 的回复:
完成端口+线程池。目前效率最高的通信模型,没有之一。。 但高并发是个整体系统,单靠一种技术是行不通的。 前置,使用反向代理,将静态请求数据和动态请求数据分离,静态请求就是请求图片、代码、UI等静态的数据,动态请求就是需要计算才能知道结果的请求,静态请求直接从静态服务器中返回结果即可。对于动态请求,再进行负载均衡,将请求分发到计算服务器上,服务器使用完成端口+线程池的通信模型来写,当然,完成端口只支持windows,如果不是windows,那就考虑go语言等等。。。。
那么线程池主要是什么?
示申○言舌 2020-06-28
  • 打赏
  • 举报
回复
完成端口+线程池。目前效率最高的通信模型,没有之一。。 但高并发是个整体系统,单靠一种技术是行不通的。 前置,使用反向代理,将静态请求数据和动态请求数据分离,静态请求就是请求图片、代码、UI等静态的数据,动态请求就是需要计算才能知道结果的请求,静态请求直接从静态服务器中返回结果即可。对于动态请求,再进行负载均衡,将请求分发到计算服务器上,服务器使用完成端口+线程池的通信模型来写,当然,完成端口只支持windows,如果不是windows,那就考虑go语言等等。。。。
abcd7038 2020-06-28
  • 打赏
  • 举报
回复
引用 1 楼 遇见女神 的回复:
这个时候就用redis中数据持久化和分布式锁的内容了,通过redis数据持久化,将缓存的数据保存到本地中来。利用redis分布式锁,控制数据安全问题。关于高可用性的话,可以采用redis集群来实现,redis集群采用rediscluster来实现,这样就可以实现这所有要求了。
有没有关于这些方面的一些小例子?
abcd7038 2020-06-27
  • 打赏
  • 举报
回复
引用 1 楼 遇见女神 的回复:
这个时候就用redis中数据持久化和分布式锁的内容了,通过redis数据持久化,将缓存的数据保存到本地中来。利用redis分布式锁,控制数据安全问题。关于高可用性的话,可以采用redis集群来实现,redis集群采用rediscluster来实现,这样就可以实现这所有要求了。
emmmm...... 这是C++的吗? 如果是,那么请问一下该用哪些头文件? 或是该下载哪些数据库?
遇见女神 2020-06-27
  • 打赏
  • 举报
回复
这个时候就用redis中数据持久化和分布式锁的内容了,通过redis数据持久化,将缓存的数据保存到本地中来。利用redis分布式锁,控制数据安全问题。关于高可用性的话,可以采用redis集群来实现,redis集群采用rediscluster来实现,这样就可以实现这所有要求了。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧