什么样的程序 多线程 会有问题
答案:2 悬赏:40 手机版
解决时间 2021-04-13 18:50
- 提问者网友:别再叽里呱啦
- 2021-04-12 19:47
什么样的程序 多线程 会有问题
最佳答案
- 五星知识达人网友:一秋
- 2021-04-12 21:13
-会导致系统崩溃的不完善的程序
-破坏多线程调用规则的程序
-获得调用后不放手的程序:获得执行权限后自己不实现自己的堵塞,比如死循环等,比如需要死等其他线程提供的数据,但忘记允许其他线程能够先于自己执行的程序
-执行时间过长而会影响到其他定时需要调用的线程执行,有可能导致流式数据不能得到及时处理的线程,或者自己处理数据算法不够优化,无法完成本职工作的程序
-其他情况(很多,只有想不到没有做不到),可以通过系统联调或试运行发现排除
-破坏多线程调用规则的程序
-获得调用后不放手的程序:获得执行权限后自己不实现自己的堵塞,比如死循环等,比如需要死等其他线程提供的数据,但忘记允许其他线程能够先于自己执行的程序
-执行时间过长而会影响到其他定时需要调用的线程执行,有可能导致流式数据不能得到及时处理的线程,或者自己处理数据算法不够优化,无法完成本职工作的程序
-其他情况(很多,只有想不到没有做不到),可以通过系统联调或试运行发现排除
全部回答
- 1楼网友:归鹤鸣
- 2021-04-12 22:16
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,都是主张多进程的。实际测试表明,tuxedo性能和并发效率是非常高的。tuxedo是贝尔实验室的,与unix同宗,应该是对unix理解最为深刻的,他们的意见应该具有很大的参考意义。
多线程的优点:
无需跨进程边界;
程序逻辑和控制方式简单;
所有线程可以直接共享内存和变量等;
线程方式消耗的总资源比进程方式好;
多线程缺点:
每个线程与主程序共用地址空间,受限于2gb地址空间;
线程之间的同步和加锁控制比较麻烦;
一个线程的崩溃可能影响到整个程序的稳定性;
到达一定的线程数程度后,即使再增加cpu也无法提高性能,例如windows server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1m),如果设定线程堆栈为2m,还达不到1500个线程总数;
线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的cpu
多进程优点:
每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加cpu,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
每个子进程都有2gb地址空间和相关资源,总体能够达到的性能上限非常大
多线程缺点:
逻辑控制复杂,需要和主程序交互;
需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
多进程调度开销比较大;
最好是多进程和多线程结合,即根据实际的需要,每个cpu开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多cpu+轮询方式来解决问题……
方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯