1

我已经用谷歌搜索了足够多的东西来理解线程和进程。我感到困惑的一件事是关于单线程进程。该场景是服务器-客户端应用程序进程,其中每个客户端都被视为服务器中的单个进程,它是单线程的。一些博客说单线程程序将无法同时处理多个客户端,即它可以启动一个进程,只有在完成后才能启动另一个进程。但是一些博客说这是可能的。

根据我的理解,在单核处理器系统中,如果将其编程为多任务处理,则取决于为每个进程分配的时间片,可以同时处理多个进程。在多处理器系统中,也可以并行处理多个客户端进程。是否只是因为它是迭代服务器而一次不处理多个进程的 Web 服务器?如果它的任何其他并发服务器,它会处理多个进程,而不是等待每个进程完成来处理下一个..?

由于我对不同博客中的许多不同解释感​​到困惑,因此我期望在具有多任务环境(或)多处理器环境的单处理器环境中,仅针对上述场景给出非常准确的答案。另外,想知道与没有任何线程的进程相比,使用单线程进程是否有任何好处。

对不起,如果我的理解是错误的。请回复。

提前致谢..

4

1 回答 1

0

如果您的服务器这样做:

while(true)
    listen()
    accept()
    read()
    process()
    write()
    close()

并且接受、读取、处理、写入和关闭的每个调用都是单线程的,然后服务器无法再次侦听新请求,直到这些调用完成。如果服务器没有监听它们,请求可能会排队或被丢弃。如果accept/read/process/write/close 比listen() 需要很长时间,那么你的服务器将不能频繁地处理请求。此外,如果一些请求需要 100 秒,而一些请求需要 1 秒,并且其中大部分时间都阻塞在 I/O 上,例如数据库或 Web 服务,那么您大部分时间都在服务器上无所事事. 这是替代方案:

while(true)
    listen()
    start new thread()
        accept()
        read()
        process()
        write()
        close()

现在你同步做的就是启动新线程来处理传入的请求,然后立即开始再次监听。操作系统将处理线程调度,如果其中一些线程最终等待很长时间以发生某些 I/O,您的服务器仍然可以同时处理快速请求。

于 2020-05-01T13:35:04.473 回答