我正在攻读我的CS专业的期末考试,主题是分布式系统和操作系统 .
我需要对术语任务,进程和线程有一个很好的定义 . 到目前为止,我确信一个进程是使用自己的内存,程序计数器,寄存器,堆栈等(进程控制块)来表示运行(或挂起但已启动)的程序 . 进程可以运行共享内存的线程,因此与必须通过IPC进行通信的进程相比,可以通过共享内存进行通信 .
但是任务和流程之间的区别是什么 . 我经常读到它们是可互换的,并且不再使用术语任务 . 这是真的吗?
进程和线程是机制,任务更具概念性 . 你可以将一大堆工作排队异步运行,例如在带有.NET的Windows上,这可以从线程池的一个线程上运行 . 使用OpenMP,任务将成为在一个核心上运行的for循环的一部分 .
次要相关说明:在Windows上,还有作业,线程池和机械纤维 . 此外,如果没有至少一个线程在运行,则进程就没有了 .
术语"task"主要用于scheduling 的上下文中,当它可以引用线程或进程***时,可以安排在处理器上运行 .从调度程序的角度来看,线程和进程之间可能几乎没有区别 - 两者都代表必须安排的任务 .
最近,术语"task"正在获得更广泛的使用,特别是在.NET开发人员中,这要归功于例如Task Parallel Library . 在其中,任务是可以安排在pool of worker threads的线程上运行的工作单元 .
*例如在内核编程中,尤其是在Linux上**理论上,你可以组成你的可调度实体
我老了 . 严格地说,“处理”是在存储器中执行的不涉及输入/输出操作的工作 . “任务”是包括I / O操作的过程 . 因此,多任务系统可以运行并发I / O流,而多处理系统必须任务切换其I / O. PC只有一个鼠标,键盘等,所以它们对我来说不是多任务系统 . 我认为大型机是一个多任务系统 .
线程化是一种切换处理上下文的技术 . 允许物理处理器驱动多个进程 . 与任务没有直接关系 .
流程过程是一种自然发生或设计的操作或事件序列,可能占用时间,空间,专业知识或其他资源,从而产生一些结果 . 可以通过在其影响下的一个或多个对象的属性中创建的改变来识别过程
线程线程类似于进程,因为它们都表示通过时间切片或多处理与其他序列并行执行的单个指令序列 . 线程是程序将自身分成两个或多个同时运行的任务的一种方式
任务将一组程序指令加载到内存中
这取决于你的背景 .
在Ada中,任务是编程语言中用于实现并发的构造 .
没有指定应该使用什么操作系统构造来实现它,但是它允许任务之间的共享内存,因此线程将是更自然的实现 .
我认为这取决于底层操作系统使用哪个术语 .
您还可以将任务视为正在运行的代码 . 然后,线程的一部分或进程的一部分可以是任务 .
6 回答
进程和线程是机制,任务更具概念性 . 你可以将一大堆工作排队异步运行,例如在带有.NET的Windows上,这可以从线程池的一个线程上运行 . 使用OpenMP,任务将成为在一个核心上运行的for循环的一部分 .
次要相关说明:在Windows上,还有作业,线程池和机械纤维 . 此外,如果没有至少一个线程在运行,则进程就没有了 .
术语"task"主要用于scheduling 的上下文中,当它可以引用线程或进程***时,可以安排在处理器上运行 .
从调度程序的角度来看,线程和进程之间可能几乎没有区别 - 两者都代表必须安排的任务 .
最近,术语"task"正在获得更广泛的使用,特别是在.NET开发人员中,这要归功于例如Task Parallel Library . 在其中,任务是可以安排在pool of worker threads的线程上运行的工作单元 .
*例如在内核编程中,尤其是在Linux上
**理论上,你可以组成你的可调度实体
我老了 . 严格地说,“处理”是在存储器中执行的不涉及输入/输出操作的工作 . “任务”是包括I / O操作的过程 . 因此,多任务系统可以运行并发I / O流,而多处理系统必须任务切换其I / O. PC只有一个鼠标,键盘等,所以它们对我来说不是多任务系统 . 我认为大型机是一个多任务系统 .
线程化是一种切换处理上下文的技术 . 允许物理处理器驱动多个进程 . 与任务没有直接关系 .
流程过程是一种自然发生或设计的操作或事件序列,可能占用时间,空间,专业知识或其他资源,从而产生一些结果 . 可以通过在其影响下的一个或多个对象的属性中创建的改变来识别过程
线程线程类似于进程,因为它们都表示通过时间切片或多处理与其他序列并行执行的单个指令序列 . 线程是程序将自身分成两个或多个同时运行的任务的一种方式
任务将一组程序指令加载到内存中
这取决于你的背景 .
在Ada中,任务是编程语言中用于实现并发的构造 .
没有指定应该使用什么操作系统构造来实现它,但是它允许任务之间的共享内存,因此线程将是更自然的实现 .
我认为这取决于底层操作系统使用哪个术语 .
您还可以将任务视为正在运行的代码 . 然后,线程的一部分或进程的一部分可以是任务 .