python - Shadowsocks为什么不使用多线程来处理连接呢?
大家讲道理
大家讲道理 2017-04-18 09:26:46
0
3
435

最近在读 shadowsocks 的源码,有一些疑惑。 shadowsocks 每次通过 epoll 监听到新连接之后,程序都会阻塞一段时间去执行 on_remote_read() 或 on_remote_write() 来传输数据,数据传输完毕之后才会再次调用 epoll 并 accept 新的 socket 连接,当连接达到一定数量之后,会出现高延迟、低效率的情况啊

# 在知乎上问了这个问题,没人理只好来 SegmentFault 啦~

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(3)
洪涛

Oleh kerana proses ini adalah operasi CPU tinggi dan memori tinggi, bukan operasi IO cakera tinggi Dengan kata lain, proses ini menguji prestasi CPU. Dan kita tahu bahawa komputer tidak mempunyai pelbagai proses sebenar atau berbilang benang, semuanya disimulasikan melalui penjadualan CPU. Oleh itu, untuk operasi CPU tinggi, lebih baik menggunakan kaedah proses tunggal atau benang tunggal (berbilang teras boleh dianggap sebagai kaedah yang paling cekap, kerana ia mengelakkan penggunaan yang disebabkan oleh beralih ke belakang dan sebagainya). antara benang atau proses.

Anda boleh merujuk kepada seni bina Nginx untuk ini Beban tinggi Nginx juga diselesaikan dalam satu proses.

小葫芦

Berbilang benang CPython bukan berbilang benang "sebenar" (lihat GIL untuk butiran Jika anda tidak menukar bahasa, penyelesaiannya adalah dengan berbilang proses, dengan pengimbang beban (haproxy dan seumpamanya) dalam). hadapan.

PHPzhong

Terdapat berbilang model untuk mengendalikan sambungan serentak. Multithreading ialah satu jenis, dan pemultipleksan I/O + tidak menyekat yang diwakili oleh epoll juga merupakan satu jenis. Selagi ia digunakan dengan betul, baca/tulis selepas sambungan baharu masuk tidak akan menyekat walaupun untuk tempoh masa yang kecil.

Pemandu veteran pada tahun-tahun awal telah membaca Dan Kegel's The C10K Problem, yang menerangkan pelbagai model pemprosesan serentak. Jika bahasa Inggeris anda boleh dikuasai, saya masih mengesyorkan anda membacanya. Oh, dengan cara ini, jika anda mempelajari konsep yang tidak melibatkan pelbagai peningkatan teknikal yang dibuat dalam sistem sebenar untuk mengendalikan konkurensi yang besar, maka "Pengaturcaraan Rangkaian Unix" Richard Stevens menerangkannya dengan lebih jelas, dan terjemahan bahasa Cina juga lebih mudah untuk baca .

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan