比如说现在我开发了一个 JAVA WEB 部署到服务器上的web容器上面运行。 然后现在有 1000 多个用户同时访问服务器,可是服务器只开放了一个端口,比如说 80 端口,那这个端口是怎么做到让 1000 多个用户同时访问的啊,如果有 1000 多个用户同事访问服务器并且进行操作的话,那么服务器上面是不是就有相应的 1000 多个线程呢?
    好吧,其实我是想了解一下网络方面的知识,比如多个用户访问某个端口,数据时串行还是并行的,端口的访问和响应到底是怎么处理的?以及 web 容器是如何处理请求以及回复的,这里面线程是如何管理。

解决方案 »

  1.   

    你提出的概念有些大,一一解答篇幅有些大,具体你要去看相关书籍,网络和操作系统方面的,还有单片机方面的,硬件方面,cpu,内存,接口等等,计算机是一个驳杂的东西,如果你想了解得细,不得不从底层开始学习,当然基于时间问题,你不太可能都去学。
    对此我能回答你的是,端口一般是进程独占的,但是线程是可以共享的,端口本身不存在串行与并行的问题,它只是一个获取数据标准而已。你说的,如果同时有1000个用户访问服务器,这就是1000并发,自然会有1000个线程,甚至因为应用问题,可能有1000+个线程,其实这是很大吞吐量了,到了这个访问级别,需要集群或者大型服务器了。
    其实对于底层而言,计算机系统,是并行还是串行,并不取决于端口,而取决于cpu,一个cpu在一个时间片段只能执行一个操作,因此单cpu都是串行的,而多cpu才有并行,当然多核心cpu也算多cpu。但是对于操作系统而已,它把cpu时间片段分割了(cpu时间片段很短),提供给每个进程或者线程使用,因此看上去像是并行。(因为程序执行的时候,瓶颈不在cpu上,而是在内存寻址以及其它io接口上,因此cpu在很多时候其实都是闲置的,多线程和多进程只是更高效利用cpu而已)。更多的,你需要自己去看书学习了。
      

  2.   

    大致上就是这样了。
    网卡上数据进来,向CPU发中断,CPU响应中断,执行操作系统预先设好的中断程序将数据读到内核缓存。
    操作系统根据端口号唤醒在等待数据的进程,进程就可以读到数据进行处理了。