什么是线程在编程时意味着什么?

时间:2010-11-05 04:01:45

标签: php multithreading

我在某处读到了php具有称为pcntl_fork()的线程化能力。但我仍然没有得到它的意思?它的目的是什么?

软件语言具有我所理解的多线程能力,如果我错了就纠正我,它是父对象拥有某些孩子的能力。

感谢

4 个答案:

答案 0 :(得分:3)

来自维基百科:“在计算机科学中,执行的线程是可以由操作系统调度的最小处理单元。它通常是由计算机程序的分支导致两个或多个并发运行的任务。” / p>

基本上,拥有线程能够在同一个正在运行的应用程序中执行多项操作(或者像RC所说的那样处理空间)。

例如,如果您正在使用PHP编写聊天服务器应用程序,那么“分叉”某些任务会非常好,所以如果服务器挂起处理类似文件传输或非常慢的客户端,它可以产生一个当主应用程序继续在客户端之间无延迟地传输消息时,线程负责文件传输。上次我使用PHP时,线程很笨重/不太受支持。

或者,在客户端,在发送所述文件时,最好对文件传输进行线程化,否则在发送文件时将无法向服务器发送消息。

答案 1 :(得分:2)

这不是一个很好的比喻。想想一个像工作者或帮助者这样的线程,它会在后台工作或为你执行代码,而你的程序可能正在做其他任务,比如接受用户输入。

答案 2 :(得分:1)

线程意味着您可以在同一个进程空间中拥有多个执行线。请注意,这与多进程范例不同,因为进程不会共享相同的内存空间。

这个wiki link可以很好地帮助您加快线程速度。话虽如此,PHP中的函数pcntl_fork()似乎创建了一个与多进程范例内联的子进程。

用外行人的话说,由于一个线程在一个程序中为你提供了多行执行,它允许你同时做多个事情。从技术上讲,你并不总是像在单个核心处理器中那样同时做这些事情,你真的只是时间切片所以看起来你一次做的不止一件事。

线程的直接使用是如何处理与Web服务器的连接。如果您没有多个线程,您的应用程序将侦听套接字上的连接,在客户端请求连接时接受连接,然后处理客户端要求的任何页面。这看起来很好,直到您有一个需要5秒钟加载的页面,并且您有2个客户端同时连接。其中一个客户端将等待服务器接受他们的连接约5秒钟,因为第一个客户端使用唯一的执行行来为页面提供服务,它不能这样做并接受第二个连接。

现在,如果你有多个线程,你将拥有一个只接受连接的线程(即监听器线程)。一旦侦听器线程接受了连接,他就会将连接传递给另一个线程。我们称之为处理器线程。一旦将连接传递给处理器线程,侦听器线程将立即返回以等待新连接。同时,处理器线程将使用它自己的执行行来服务需要5秒的页面。在上面的场景中,第二个客户端会在第一个客户端交给第一个处理器线程后立即接受它的连接,并且将创建另一个第二个处理器线程来处理来自第二个客户端的请求。这通常允许您在5秒内为客户端提供数据,而单线程应用程序需要大约10秒。

希望这有助于您理解应用程序线程。

答案 3 :(得分:-2)

线程意味着不允许代码中的顺序行为,无论您的编程语言是什么......