ZKX's LAB

Linux 下多线程和多进程程序的优缺点,各自适合什么样的业务场景 linux多进程服务器编程

2021-04-06知识2

多线程vs多进程,谁在Linux能更好发挥多核CP 多线程和多进程应该是各有所长吧,它们都能很好的发挥处理器多核性能,对于多进程来说,Linux的进程是轻量级的,进程本身的资源开销相当小,而且Linux的进程可以互相协作、互相发送消息、互相中断,还可以共享内存段,编写多个相互协作的进程也要比编写多线程更容易,所以在Linux编程中多进程要比多线程更加常用一些。但是多进程之间共享变量不是很容易,它们毕竟是各自独立的实体,而多线程可以很容易的共享变量(当然前提是搞好线程同步),所以会有一些数据库服务器程序用多线程技术,总之就是各有所长,根据编程的需要进行取舍。

linux单进程如何实现多核cpu多线程分配? linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主要有2个方法1:利用linux系统自己的线程切换机制,linux有一个服务叫做irqbalance,这个服务是linux系统自带的,默认会启动,这个服务的作用就是把多线程平均分配到CPU的每个核上面,只要这个服务不停止,多线程分配就可以自己实现。但是要注意,如果线程函数内部的有某个循环,且该循环内没有任何系统调用的话,可能会导致这个线程的CPU时间无法被切换出去。也就是占满CPU现象,此时加个系统调用,例如sleep,线程所占的CPU时间就可以切换出去了。2:利用pthread库自带的线程亲和性设置函数,来设置线程在某个CPU核心上跑,这个需要在程序内部实现。同时注意不要和进程亲和性设置搞混淆了int pthread_setaffinity_np(pthread_t thread,size_t cpusetsize,const cpu_set_t*cpuset);int pthread_getaffinity_np(pthread_t thread,size_t cpusetsize,cpu_set_t*cpuset);从函数名以及参数名都很明了,唯一需要点解释下的可能就是cpu_set_t这个结构体了。这个结构体的理解类似于select中的fd_set,可以理解为cpu集,也是通过约定好的宏来进行清除、e79fa5e98193e4b893e5b19e31333337396337设置。

Linux 下多线程和多进程程序的优缺点,各自适合什么样的业务场景IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。如果是UNIX/linux环境,采用多线程没必要。多线程比多进程性能高?误导!应该说,多线程比多进程成本低,但性能更低。在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。多线程是平面交通系统,造价低,但红绿灯太多,老堵车。我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际。

#linux多进程服务器编程

随机阅读

qrcode
访问手机版