线程的三种基本状态 工作者线程和用户界面线程?
工作者线程和用户界面线程?
1)接口最好在一个线程中管理。
2)最好由主线程来管理接口。3)在MFC中,如果主接口收到WM_QUIT,表示关闭窗口,那么主线程会退出/返回/返回。4)主线程退出,其他辅助线程也会因为主线程的退出而退出,不管执行是否完成,都意味着进程结束。楼主说的不够准确。我的理解是,工作线程执行计算时,主线程的主界面不负责显示工作进度。只要有工作线程,主界面就应该创建一个界面来显示工作线程的工作进度。如果工作线程结束,进度显示界面也应该消失。如果是这样的逻辑,可以布局如下:1)专门定义了一个进度接口的窗口类。为了与工作线程通信,需要为这个进度接口的窗口类定制各种自定义消息,并且要将这个类的窗口实例作为主接口的子窗口。这是在主界面关闭时完成的,作为子窗口,它也会被关闭。2)工作线程应该由主接口创建,进度接口也应该由主接口创建。
3)工作线程汇报工作进度,主界面不干涉。报告工作通过定制的消息在工作线程和进度接口之间直接实现。
4)工作者线程需要返回之前,会向主接口发送一个关于完成的消息。
5)所有线程都有一个 "完成信号 "状态,即线程运行时处于无信号状态,线程结束退出时处于信号状态。如果不熟悉,可以看看 "系统编程与设计。使用此功能,主线程在收到工作线程即将完成的消息后调用WaitForSingleObject,并临时阻塞自身。阻塞将导致主界面无法响应用户。;鼠标和键盘消息,形成假死状态。但是这种情况几乎看不到。当主线程收到工作线程的消息后调用WaitForSingleObject时,会发生阻塞,但此时工作线程基本已经退出,所以WaitForSingleObject几乎不等待就返回,所以主接口被阻塞的估计值不到1秒。即使在最坏的情况下,多个工作线程同时完成,主接口也需要依次调用WaitForSingleObject,所以不会有问题。6)WaitForSingleObject返回,标记工作线程结束,主界面可以安全关闭进度界面窗口。
什么是php进程?
首先,PHP流程模型
进程的概念是操作系统结构的基础。Multics的设计者在60年代首次使用这个专业术语,比作业更笼统。流程的定义如下:
1.正在执行的程序。
2.计算机中正在运行的程序的例子。
3.它可以被分配给处理器并由处理器执行。的实体。
4.由单个顺序执行线程、当前状态和一组相关系统资源描述的活动单元。
二、进程和线程的区别
进程是资源分配的基本单位。与过程相关的所有资源都记录在过程控制块PCB中。以指示该进程拥有或正在使用这些资源。
另外,进程也是抢占式处理器的调度单元,它拥有完整的虚拟地址空间。在调度进程时,不同的进程有不同的虚拟地址空间,而同一进程中的不同线程共享相同的地址空间。
对应一个进程,线程与资源分配无关。它属于一个进程,并与该进程中的其他线程共享该进程的资源。
线程仅由相关的堆栈(系统堆栈或用户堆栈)寄存器和线程控制表TCB组成。寄存器可用于存储线程内的局部变量,但不能存储其他线程的相关变量。
通常,一个进程可以包含几个线程,这些线程可以利用进程所拥有的资源。在有线程的操作系统中,进程通常被视为分配资源的基本单位,而线程则被视为独立运行和独立调度的基本单位。由于线程比进程小,基本没有系统资源,其调度的成本会小很多,可以更高效地提高系统中多个程序并发执行的程度,从而显著提高系统资源的利用率和吞吐量。因此,近年来,通用操作系统为了进一步提高系统的并发性,纷纷引入线程,并将其作为现代操作系统的重要指标。
线程和进程之间的差异可以总结如下:
(1)进程是资源分配和调度的独立单位,而线程是CPU调度的基本单位。
(2)同一个进程中可以包含多个线程,线程共享整个进程的资源(寄存器、栈、上下文),每个进程至少包含一个线程。
(3)进程的创建调用fork或vfork,而线程的创建调用pthread_create。进程结束后,它拥有的所有线程都将被销毁,一个线程的结束不会影响同一进程中其他线程的结束。
(4)线程是轻量级进程,创建和销毁线程所需的时间比进程少得多。操作系统中所有的执行功能都是通过创建线程来完成的。
(5)在线程中执行时,一般需要同步和互斥,因为它们共享同一个进程的所有资源。
(6)线程有自己的私有属性TCB、线程id、寄存器和硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些属性是不共享的,用来标记一个进程或线程。
第三,进程间的通信
1.管道和命名管道:管道可用于相关进程之间的通信。名管克服了管没有名字的限制。因此,除了管道的功能之外,它们还允许无关进程之间的通信;
2.信号:信号是一种复杂的通信,用于通知接收进程某个事件已经发生。除了进程间通信,进程还可以向进程本身发送信号。Linux不仅支持Unix早期的信号语义函数sigal,还支持语义符合Posix.1标准的信号函数sigaction(实际上这个函数是基于BSD的,BSD为了实现可靠的信号机制和统一对外接口,用sigaction函数重新实现了信号函数)。
3.消息队列(Message queue):消息队列是消息的链表,包括Posix消息队列system V message queue。拥有足够权限的进程可以将消息添加到队列中,拥有读取权限的进程可以从队列中读取消息。消息队列克服了信号携带信息量少、流水线只能携带无格式字节流和缓冲区大小有限的缺点。
4.共享内存:它允许多个进程访问同一个内存空间,这是最快的IPC形式。它是针对其他通信机制的低效率而设计的。它通常与其他通信机制(如信号量)结合使用,以实现进程间的同步和互斥。
信号量(Semaphore):主要用作进程之间以及同一进程的不同线程之间的同步手段。
Socket:一种更通用的进程间通信机制,可用于不同机器之间的进程间通信。它最初是由Unix系统的BSD分支开发的,但现在它一般可以移植到其他类似Unix的系统:Linux和System V支持套接字的变体。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。