I/O模型:完成端口,使用有限数量的线程,非user per thread
但仍基本可保证和user per thread的流程一样
user/thread模型:
每个用户一个线程,用户和线程是对应的关系
完成端口模型:
用户和线程无对应关系,用户可能在任何一个I/O线程中运行。
要想把完成端口模型模拟成user/thread模型,最关键的是保证用户和栈是对应的
至于和线程是不是对应的无所谓。
所以在完成端口模型下,在某I/O线程中处理某用户的时候,只要将当前线程的栈
替换掉,用单独为该用户分配的栈即可。
在缓冲区内数据为空时,先使用setjmp保存当前栈内容,再使用longjmp恢复原来的栈,
等下次缓冲区有数据时,再longjmp恢复该用户原来的状态。
这样即可模拟成user/thread模型。
我已经做了测试,测试通过,hoho!!
每个用户分配了64KB内存,其中8KB来存用户数据,其他的作为栈
为了使内存使用量降低,可以调整原I/O线程的栈的大小,因为I/O线程内对原有栈的需
求不再很高
每个用户64KB内存,1000个用户也才64M内存。至于其他内存需要应该不是主要的,不会
带来多大负担。
所以这种解决方法应该很不错的。不过是不是还有其他要考虑的东西,由于较忙,没有
深 想
---
v y
(o o)(@ @)
( v )( v )------------------------------mm-----ww-----------------------------------
Y:喜欢我嘛? V:嘻嘻,喜欢 :)
Y:那嫁给我吧!好嘛? V:那你替我煮一辈子饭吧! :)
Y:咣当当当......... Y:嘿嘿,我可以给你捉一辈子虫子!!! :)
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.55.87]
FROM 202.112.55.87