nginx通过配置同cpu核数一致的worker进程(单线程),来并行接纳客户端连接,那为什么分配(争抢方式也可以理解近似地理解为分配)的方式是争抢?争抢不就意味着随机吗,那不是有可能存在一个进程管理很多连接,一个进程管理很少?由master来轮训分配不香吗?(知道master只是管理worker的日常,而不对连接进行任何业务处理)
随机就随机呗,有什么问题吗?
你想用 master 来分配,只是单纯轮询?那本来是哪个 worker 一空闲就尝试获取锁、获取成功了就 accept()
;结果变成了 master 指哪个 worker 哪个 worker 就得收,也不管这个 worker 是不是空闲的。
好,你说 master 跟 worker 之间同步状态,要带上 worker 忙不忙的状态,这样 master 就能根据谁不忙给谁分配了。可这一来是多进程通讯,不还是得有把锁来保证安全?二来如果就赶上了,所有 worker 某一时刻都忙,不能立即执行 accept()
,你是要 master 搁这儿等着(变阻塞了)、还是 worker 再开一个线程等着(本来 worker 是单线程的,结果变多线程了,不还得有锁么)?