首页>>新闻中心>>建设知识

成都网站建设——多线程

来源: 本站    发布时间: 2018-12-25 20:08    阅读次数:

多线程 多用户并发访问是网站的基本需求,大型网站的并发用户数会达到数万,单台服务器的并发用户到达数百。GGI编程时代,每个用户请求都会创建一个独立的系统进程去处理。由于线程比进程更轻量,更少占有资源,切换代价更小,所以目前主要的Web应用服务器采用多线程的方式响应并发用户请求,因此网站开发天然就是多线程编程。 从资源利用的角度看,使用多线程的原因主要有两个:IO阻塞与多CPU。当前线程进行IO处理的时候,会被阻塞释放CPU以等待IO操作完成,由于IO操作(不管是磁盘IO还是网络IO)

通常都需要较长的时间,这时CPU可以调度其他的线程进行处理。当前我们提到,理想的系统Load是既没有进程(线程)等待也没有CPU空闲,利用多线程IO阻塞与执行交替进行,可最大限度地利用CPU资源,使用多线程的另一个原因是服务器有多个CPU,在这个连手机都有四核CPU的时代,除了最低配置的虚拟机,一般数据中心的服务器至少16核CPU,要想最大限度地使用这些CPU,必须启动多线程。 网站的应用程序一般都被Web服务器容器管理,用户请求的多线程也通常被Web服务器容器管理,但不管是Web容器管理的线程,还是应用程序自己创建的线程,一台服务器上启动多少线程合适吗?假设服务器上执行的都是相同类型任务,针对该类任务启动的线程又个简化的估算公式可供参考。 

最佳启动线程数和CPU内核数量成正比,和IO等待时间成正比,如果任务都是CPU计算型任务,那么线程数最多不超过CPU内核数,因为启动再多线程,CPU也来不及调度;相反如果是任务需要等待磁盘操作,网络响应,那么启动线程有助于提高任务并发度,提高系统吞吐能力,改善系统性能。 多线程编程一个需要注意的问题是线程安全问题,即多线程并发对某个资源进行修改,导致数据混乱,这也是缺乏经验的网站工程师最容易犯错的地方,而线程安全Bug又难以测试和重视,网站故障中,许多所谓偶然发生的“灵异事件”都和多线程并发问题有关,对网站而言,不管有没有进行多线程编程,工程师写的每一行代码都会被多线程执行,因为用户请求是并发提交的,也就是说,所有的资源——对象、内存、文件、数据库,乃至另一个线程都可能被多线程并发访问。

一起设计吧
BACK