该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-09
ray_linn 写道 终于找到点东西了:
“NPTL uses a similar approach to LinuxThreads, in that the primary abstraction known by the kernel is still a process, and new threads are created with the clone() system call (called from the NPTL library). ” 总来来说内核决定了一切,该是进程还是进程,该是线程还是线程。 大锅,俺没有看出来你的这个引用有说明什么特殊的问题. 这段引用只是在描述NPTL和linuxthreads这两个模块产生的线程对内核来说其他都是进程.没有什么实质性的说明啊. 有人说"2.4内核的多线程无法使用多个cpu,一个进程的线程都被限制在同一个cpu上运行",不过我的内核是2.6的,而且我并没有说我出现一个核被使用,另外一个核没有被使用的情况.由此可见,在2.6内核中多线程是可以使用多个cpu的,但是正如robbin大哥所说,由于全局锁的问题,导致其并不能完全充分的使用这两个核 |
|
返回顶楼 | |
发表时间:2008-12-09
最后修改:2008-12-09
Windows操作系统在多CPU服务器上面的表现不佳,而且可以说是非常糟糕!这是我在HP公司,以及Dell公司从事服务器产品线咨询的两位朋友先后告诉我的情况。我那位Dell的朋友甚至告诉我,他们有些客户碰到的问题,必须向微软公司索要某些特定的Windows内核补丁,才能恢复正常。(有些问题微软公司会告诉说新补丁还没有出,那就只好继续忍受)
BTW: 其实我很奇怪的是,你在Dell公司的哪个部门工作,如果你是负责服务器产品线的,这些问题你怎么会都不知道?如果是公司内部的IT部门,那我就理解了。 |
|
返回顶楼 | |
发表时间:2008-12-09
最后修改:2008-12-09
ahuaxuan 写道 ray_linn 写道 终于找到点东西了:
“NPTL uses a similar approach to LinuxThreads, in that the primary abstraction known by the kernel is still a process, and new threads are created with the clone() system call (called from the NPTL library). ” 总来来说内核决定了一切,该是进程还是进程,该是线程还是线程。 大锅,俺没有看出来你的这个引用有说明什么特殊的问题. 这段引用只是在描述NPTL和linuxthreads这两个模块产生的线程对内核来说其他都是进程.没有什么实质性的说明啊. 有人说"2.4内核的多线程无法使用多个cpu,一个进程的线程都被限制在同一个cpu上运行",不过我的内核是2.6的,而且我并没有说我出现一个核被使用,另外一个核没有被使用的情况.由此可见,在2.6内核中多线程是可以使用多个cpu的,但是正如robbin大哥所说,由于全局锁的问题,导致其并不能完全充分的使用这两个核 我奇怪的是你这一段"两个核心可以”同时“控制不同的进程。而线程模型下是单进程的,有一个核就被浪费了"...如何被浪费了? 俺这一段的主旨是想说内核里运行的是啥,就该用啥.linux下就该用进程,windows下就该用线程,无须费老大力气去做测试. |
|
返回顶楼 | |
发表时间:2008-12-10
最后修改:2008-12-10
ray_linn 写道 我奇怪的是你这一段"两个核心可以”同时“控制不同的进程。而线程模型下是单进程的,有一个核就被浪费了"...如何被浪费了? 之前我的理解是错误的,误认为线程模型下,没有完全使用多核的优势,这个错误的理解robbin大哥已经指出了啊. ray_linn 写道 俺这一段的主旨是想说内核里运行的是啥,就该用啥.linux下就该用进程,windows下就该用线程,无须费老大力气去做测试. 做测试的原因是为了严谨一点,君不见网上n多的文章都说线程模型快,他们既没有测全面,也没有分析全面,误导大众.我只是想还进程模型一个清白,呵呵 ------------------------------------------------- 不过我很奇怪的是,在windows下多线程真的可以使用多核吗,人家内部人事都说了,windows对多cpu支持比较差,你应该知道一点吧 |
|
返回顶楼 | |
发表时间:2008-12-10
最后修改:2008-12-10
ahuaxuan 写道 不过我很奇怪的是,在windows下多线程真的可以使用多核吗,人家内部人事都说了,windows对多cpu支持比较差,你应该知道一点吧 理论上来说,我觉得这应该没问题的,完全取决于内核如何调配CPU资源的问题。多线程的模式不单单是MS一家,许多比MS更优秀的OS/2(NT核心), MAC OS都是采用thread而不是进程的方式。这个内部人士难道不知道他的公司里几乎都是windows服务器么? linux下的线程说到底就是个“仿真线程”进程,也就无怪呼慢了,NTPL我猜想是利用了"kernel thread"--(强烈鄙视这个混淆视听的名字)进程来提高效率,但从kernel看出来的话,到底还是进程。至于2.4上,如果开启的是linuxThread,那慢也是自然的。 所以我想首先请你确认一下用的是NTPL还是linuxthread,其次我想说的,linux上的thread不是真的thread,比较起来意义也不大。 你要测试线程的话,不喜欢windows也可以用Sun Solaris,我只是举一个典型的线程核心的os,robbin非要牵扯出对windows的讨伐,呵呵。 我们可以姑且认为solaris和linux的os效率接近,那么在两个os上比较一下django的performance吧。 |
|
返回顶楼 | |
发表时间:2008-12-10
ahuaxuan 写道 做测试的原因是为了严谨一点,君不见网上n多的文章都说线程模型快,他们既没有测全面,也没有分析全面,误导大众.我只是想还进程模型一个清白,呵呵
我觉得首先还是应该问问他们的测试环境和测试方法,光看测试结果没有任何意义。 学过工科的,大概都学过测量学吧? |
|
返回顶楼 | |
发表时间:2008-12-10
ray_linn 写道 我觉得首先还是应该问问他们的测试环境和测试方法,光看测试结果没有任何意义。 学过工科的,大概都学过测量学吧? 我还真没有学过测量学,不过文章开头的那两个地址的测试都太单薄了,没有环境,没有参数,啥都没有结论就出来. 我的测试结果我在前面的帖子里就说明了,在linux kernel2.6且机器多核的场景下得到的结论,如果按你所说,soloris,mac,windos都测一遍其实意义不大.甚至什么人去关心这种事情. 所以要指出我的结论是错误的,前提也应该是在linux kernel2.6,机器是多核的前提下 |
|
返回顶楼 | |
发表时间:2008-12-10
最后修改:2008-12-10
PS: 我再多嘴问一句:
AB和django是在两台机上,还是在一台机器上? 如果是一台机器,那你的数据应该就有问题了。AB应该也是多线程来模拟多用户的,可能会对多线程模型造成影响。 I know for realistic benchmarks you shouldn't run it on the same server. |
|
返回顶楼 | |
发表时间:2008-12-10
ray_linn 写道 PS: 我再多嘴问一句:
AB和django是在两台机上,还是在一台机器上? 如果是一台机器,那你的数据应该就有问题了。AB应该也是多线程来模拟多用户的,可能会对多线程模型造成影响。 I know for realistic benchmarks you shouldn't run it on the same server. 这个应该没有什么关系,我测线程模型的时候cpu根本就没有能得到充分的利用.大概70-80%,所以不会有什么影响,而且ab的多线程对django的多线程根本不在同一个进程内,何来影响之说呀 |
|
返回顶楼 | |
发表时间:2008-12-13
robbin 写道 ahuaxuan 写道 robbin 写道 我部署JavaEye服务器是自己写shell脚本来控制FCGI进程的spawn,respawn,很稳定,很健壮,而且很容易维护。 想了几分钟,还是没有想通具体的做法或者思路是什么样子的,shell脚本是如何去控制系统中进程的行为的呢,难道那个进程有提供这样的接口或者什么滴? 知识不够用了,robbin大哥能否为我们讲解一下具体的思路。 我们是静态spawn的,用lighttpd的spawn-fcgi命令来spawn进程就可以了,不进行动态spawn,当然shell启动脚本还有很多其他工作要做。另外的一个shell脚本用来监控FCGI的内存使用状况,发现超过限额以后就respawn它,另外还有一个进程健康检查的shell,如果发现进程crash掉,就spawn一个新的进程。 这样感觉是一个饭馆,只要开张,只有10张桌子, 如果客人真的来多了,也就真的没办法服务了. 不知道有没有更好的办法,即能解决服务器的稳定服务,又能提供动态的扩展? |
|
返回顶楼 | |