Ich verwende ein Epoll-Modell am Ende der Kommunikation. Wenn Epoll die Anfrage verarbeitet, übergibt es sie zur Verarbeitung. Die Threads im Thread-Pool rufen den Dienst der oberen Schicht auf Da es sich um Netzwerkkommunikation handelt, wird es grob behandelt. Eine Anfrage dauert weniger als 10 ms
Wird ein solches Modell einen starken CPU-Anstieg verursachen, wenn der Datenverkehr zunimmt?
Hintergrund: Meine CPU-Auslastung beträgt etwa 75 % (Verkehr: 20–22 Mbit/s); wenn der Datenverkehr auf 25 Mbit/s ansteigt, ist die CPU direkt voll. . Das ist nicht ganz wie erwartet, denn der Traffic-Anstieg beträgt weniger als 15 %, die CPU steigt aber um 25 %.
简单说下我的观点,仅供你参考哈:
1:先考虑你的请求是IO密集还是CPU密集?我说的IO密集是指需要read和write收发消息的网络IO,也就是通信;CPU密集例如需要经过运算才能出结果,且时间较长。
2:如果是第一种IO密集型的,那我觉得你没必要把所有的请求都交给线程池去处理。如果没有读写文件等磁盘IO耗时的操作,甚至都不一定使用线程池。这种方式下 One loop per thread模型无疑是最高效的了,说白了就是在单个EPOLL中完成所有的读写(网络数据的读写,而不是读文件)和定时事件。
3:如果是CPU密集型的,那用thread_pool没有问题,就看你的配置的线程数和代码有没有问题了。
这个问题没有实际环境也不好回答,我全当抛砖引玉,不对的地方望指出。