Advertisement

多进程鱼多线程的权衡选择

阅读量:

最近有很多人在网上讨论关于开发游戏框架时应该使用多线程还是多进程的问题,还有其他相关问题也值得探讨。以下由小高为您详细解析

首先需要明确的是进程与线程的概念:进程(Process)是指基于特定数据集独立运行的应用程序的一次执行行为,在资源分配与调度方面具有独立功能。与一般的程序不同的是程序仅由一系列有序排列的操作指令组成,并不具备执行功能;而进程则是一个动态实体,在其操作的数据集中从启动到终止之间经历了一系列的操作活动包括等待资源、事件处理以及任务完成等环节。每一个进程都对应着一个特定的应用程序在其操作的数据集上的一次完整运行过程。这个概念有助于深入理解计算机系统的资源管理和任务调度机制的基本原理。

每个处于运行状态的应用程序都可以被视作一个进程。每个进程都包含一个或多个线程。需要注意的是,在某些情况下这个进程也可能仅指整个应用程序本身或是其一部分在运行期间所处的状态。线程本质上可被视为一组指令序列或是特定代码块,在应用层面能够以独立的方式被处理。此外也可以将之理解为代码运行环境的一部分。因此从另一个角度来看,在单个进程中协调同一进程中多项任务间的资源分配与同步的任务正是由线程所承担的主要职责之一

多线程旨在同步执行多个任务,并非为了提升运行效率;其核心在于通过优化资源利用率来增强系统整体效能。当在同一时间段内需要完成多项任务时才得以实现。

使用线程的好处有以下几点:

a)使用线程可以把占据长时间的程序中的任务放到后台去处理

b) 提升用户的界面体验 例如当用户点击按钮时触发相应的事件处理流程 系统会动态地显示整个操作的进程

c)程序的运行速度可能加快

d)在某些特定任务的实现过程中涉及用户输入操作、文件读取以及网络数据接收等内容时,线程的作用就显得尤为突出.此时我们能够释放一些重要的资源诸如内存占用等.

2、其次来看下线程和进程的关系

该程序中的每个线程都属于其所属的进程,在同一个进程中各个子线程之间会共享同一片内存空间,并且在父进程退出时其所有的子线程均会被强行终止并清除。每个子线程不仅能够与其他同属一个进程的其他子线程共同分享该进程所拥有的全部系统资源,并且能够访问与整个操作系统相关联的所有信息;然而每个单独的子线程基本上不具备独立操作系统的资源,在执行过程中仅需要维护一组基本信息(如程序计数器、寄存器组和栈)。

3、然后我们来看下线程和进程间的比较

4、设计时考虑的使用技巧

这里参照ang639在多进程和多线程设计思考中提及的原则:

建议尽可能减少长时间占用内存的任务。如一些不常用的功能模块,在必要时重新启动这些应用程序。将这些功能封装成独立的应用程序,并在不需要时停止运行(可以通过crontab定时任务的方式或直接启动相应的应用程序)

  1. 通过将目标设计为子功能系统的组合来提高其重用性、易用性和维护性。
    将目标按照功能划分为不同的子系统;这些子系统之间遵循特定协议(如基于文本或XML的数据交换格式),通过通信机制联系起来,并共同协作完成目标。

也就是说,我们在做设计的时候可以如下考虑:

  • 线程的创建、通信及同步过程相较于进程而言更为高效。
  • 在多核CPU环境下进行任务划分时,这一操作是针对线程层面而非涉及进程机制。

若无需频繁创建或销毁,则执行效率不高;若需频繁创建,则线程运行迅速。

3、根据你的具体情况做出选择吧。如果没有采用数据通信方案的话,在这种情况下线程之间的通信通常会比进程间的通信更为便捷。最核心的特点是多线程技术可以让同一个程序的不同部分能够同时并行执行。

全部评论 (0)

还没有任何评论哟~