(码农翻身注: 详情参加文章《张大胖的socket》)
看看, 这些socket, bind, listen , accept... 都是操作系统老大提供的接口, 我能做的也就是把他们组装起来: 先在80端口监听, 然后进入无限循环,如果有连接请求来了,就接受(accept),创建新的socket, 最后才可以通过这个socket来接收,发送http数据。
老大给我的程序起了个名称, Http Server, 版本1.0 。
这个名字听起来挺高端的, 我喜欢。
我兴冲冲的拿来实验, 程序启动了, 在80端口“蹲守”, 过了一会儿就有连接请求了, 赶紧Accept ,建立新的socket, 成功 ! 接下来就需要从socket 中读取Http Request了。
可是这个receive 调用好慢, 我足足等了100毫秒还没有响应 ! 我被阻塞(block)住了!
操作系统老大说: “别急啊, 我也在等着从网卡那里读数据,读完以后就会复制给你。 ”
我乐的清闲, 可以休息一下。
可是操作系统老大说:“别介啊, 后边还有很多浏览器要发起连接, 你不能在这儿歇着啊。”
我说不歇着怎么办? receive调用在你这里阻塞着, 我除了加入阻塞队列, 让出CPU让别人用还能干什么?
老大说: “唉, 大学里没听说过多进程吗? 你现在很明显是单进程, 一旦阻塞就完蛋了, 想办法用下多进程, 每个进程处理一个请求! ”
老大教训的是, 我忘了多进程并发编程了。