精华内容
下载资源
问答
  • 进程(process)和线程(thread)是操作系统的基本概念,但是...vs 线程 :一个进程可以包含多个线程" title="进程 vs 线程 :一个进程可以包含多个线程" style="border:0px; max-width:602px; height:auto; ma

    进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。

    最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

    1.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。

    2.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。

    3.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

    4.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    一个车间里,可以有很多工人。他们协同完成一个任务。

    5.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    线程就好比车间里的工人。一个进程可以包括多个线程。

    6.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

    7.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。

    8.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。

    9.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。

    10.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。

    不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

    11.

    进程 <wbr>vs <wbr>线程 <wbr>:一个进程可以包含多个线程

    操作系统的设计,因此可以归结为三点:

    (1)以多进程形式,允许多个任务同时运行;

    (2)以多线程形式,允许单个任务分成不同的部分运行;

    (3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

    (完)

    展开全文
  • 单个进程监听多个端口单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行多个进程监听同个端口(multiple processes listen on same port)方式1:通过 fork 创建子进程的方式可以实现,其他情况下不行。...

    单个进程监听多个端口

    单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行


    多个进程监听同一个端口(multiple processes listen on same port)

    方式1:通过 fork 创建子进程的方式可以实现,其他情况下不行。

    当连接到来时,子进程、父进程都可以 accept, 这就是著名的“惊群”问题(thundering herd problem)。

    NGINX 的 master/work 处理方法:

    Flow of an NGINX worker process

    可以设置 ffd 的 close-on-exec flag 避免子进程继承 fd.


    方式2:我们都知道socket是网络上两个进程之间的双向通信链路, 即

    socket = 《A进程的IP地址:端口号,B进程的IP地址:端口号》

    那么有个问题就很有意思了,不同的进程可以监听在同一个IP地址:端口号么?

    根据Unix网络编程中的知识可知,服务端监听一个端口会经历:

    1、根据套接字类型(Ipv4,Ipv6等)创建套接字socket

    2、将套接字bind绑定到具体的网络地址和端口号

    3、调用listen开始在这个套接字上进行监听。

    Unix提供了一个接口setsockopt()可以在bind之前设置套接字选项,其中就包括REUSEADDR这个选项,表明可以多个进程复用bind函数中指定的地址和端口号。

    由此可知多个应用(进程),包括同一个应用多次,都是可以绑定到同一个端口进行监听的。对应地C++、NET等高级语言也都提供了对应的接口。


    从一些例子也可以看出,比如有时候你在服务器上执行netstat -ano可能会发现同一个应用程序在同一个端口上有多个监听,这是因为一些服务端应用程序可能会异常退出或者没有完全释放套接字,但是需要在重新启动时还能够再次监听同一个端口,所以需要能够具备重复监听同一个端口的能力,因此也出现上述情形。


    展开全文
  • Android多进程实现,个APP多个进程

    一、前言

    • Android中,默认一个APK包就对应一个进程。
    • Android平台对每个进程有内存限制,如果一個app有多个进程,那么总的内存就是所有进程的内存的总和,使用多进程,可以提高我们APP占用的最高内存。

    二、实现

    • 实现多进程可以通过设置service、broadcast、activity的标签android:process来实现。
    • 一般情况下启动这些组件默认是在同一个进程里运行的,如果设置了android:process标签,则会运行在其他进程里。
    • 如果android:process的value不是”:”开头,则系统里有同样名字的进程的话,会放到已存在的同名进程里运行,这样能减小消耗。
    • 如果android:process的value是以”:”开头,则启动一个名字为value的进程。

    三、代码

     <service
                android:name=".service.AbleService"
                android:enabled="true"
                android:exported="true"
                android:process="com.fingerth.able.service">
    
            </service>

    四、运行,发生了什么鬼

    • 这里,我们用的bindService启动服务,出现异常java.lang.ClassCastException: android.os.BinderProxy cannot be cast to …
      你会看到这样的异常
    • 这是因为我们的AbleService在另一个进程。要实现进程间通信,就要用到AIDL了。
    • 当然,讲解AIDL我们留到下章。
    • 但是我也要运行啊,这里,我们不用Bind启动服务。looklook我们的AbleService是不是在一个新的进程里运行。
    Intent intent = new Intent(this, AbleService.class);
            startService(intent);
    • 运行后,看图
      看我们的进程
    展开全文
  • Android多进程实现,个APP多个进程

    千次阅读 2019-07-30 10:03:06
    相关文章: Android IPC机制()开启多进程(文章1:刘望舒大神的...Android多进程实现,个APP多个进程(文章3:1w阅读量,5赞) Android中,默认个APK包就对应个进程。 Android平台对每个进程有内存限...

    相关文章:

    Android IPC机制(一)开启多进程(文章1:刘望舒大神的文章,1.3w阅读量,20赞)

    Android IPC机制(二)用Messenger进行进程间通信(文章2:刘望舒大神的文章,6k阅读量,7赞)

    Android多进程实现,一个APP多个进程(文章3:1w阅读量,5赞)

     

    • Android中,默认一个APK包就对应一个进程。
    • Android平台对每个进程有内存限制,如果一個app有多个进程,那么总的内存就是所有进程的内存的总和,使用多进程,可以提高我们APP占用的最高内存。

    如何获取当前应用app所在的进程id和进程名称

    int pid = android.os.Process.myPid();
    String processName = "";
    ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
     
    List<ActivityManager.RunningAppProcessInfo> list = activityManager.getRunningAppProcesses();
    for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : list){
       if (runningAppProcessInfo.pid == pid){
           processName = runningAppProcessInfo.processName;
       }
    }
     
    Log.i(TAG,"当前进程名称:" + processName);
    

     

    展开全文
  • 1.在个应用中想启动两个进程,常用的做法是: AndroidManifest.xml
  • 阅读目录 :nodejs进程进化及多进程架构原理 ...NodeJS是基于chrome浏览器的V8引擎构建的,它是单线程单进程模式,nodeJS的单线程指js的引擎只有一个实列。且是在主线程执行的,这样的优点是:可以减少线程间切换...
  • 一个进程能运行多少线程

    千次阅读 2019-04-11 15:22:41
    也知道线程的概念,它是程序执行的最小单元,是进程中的个实体用来执行程序,一个进程中有多个线程。(个cpu内核只能运行一个进程/线程,台8核cpu的服务器只能同时运行8个进程/线程。只是每个进...
  • 线程占有的都是不共享的,其中包括:栈、寄存器、状态、程序计数器 ...线程共享的内容包括进程 代码段 进程 数据段 进程打开的文件描述符、 信号的处理器、 进程的当前目录和 进程用户 ID 与进程组 ID ...
  • 线程、进程线程、多进程任务 小结

    千次阅读 多人点赞 2019-04-20 11:59:56
    3 多进程 4 线程 5 线程与进程的关系 6 线程和进程的区别 7 进程的优缺点 7.1 进程的优点 7.2 进程的缺点 8 线程的优缺点 8.1 线程的优点 8.2 线程的缺点 9 线程的优缺点 9.1 线程的优点 9.2 ...
  • 多个进程能否监听同个端口号

    千次阅读 2019-05-31 14:03:17
    我们都知道socket是网络上两个进程之间的双向通信链路, 即socket = 《A进程的IP地址:端口号,B进程的IP地址:端口号》 那么有个问题就很有意思了,不同的进程可以监听在同个IP地址:端口号么?根据Unix网络...
  • 正常情况下,个apk启动后只会运行在一个进程中,其进程名为apk的包名,所有的组件都会在这个进程中运行,以下为DDMS的进程截屏: com.biyou.multiprocess为进程名,也是apk的包名,  但是如果需要将某些组件(如...
  • 一个进程最多能包含多少线程

    万次阅读 2012-10-20 16:22:34
    实验蛮简单的,但是,我不由想到了,一个进程最多能包含多少个线程。 在网上查了查,貌似也没找到多少这方面的资料。大部分都是关于服务器线程链接sever的,关于本机可执行exe的进程数倒是没有什么涉及。 我觉得...
  • 在Linux下我们可以用fork函数创建个子进程,但是当我们需要在一个进程下创建个子进程时,有些需要注意的地方。假设我们用如下代码在一个进程下创建两个子进程: void main() { pid_t pid1, pid2; pid1 = ...
  • Docker中运行多个进程时的处理

    千次阅读 2020-01-07 02:05:54
    通常,Docker容器适合运行单个进程,但是很多时候我们需要在Docker容器中运行多个进程。这时有两种不同方法来运行多进程容器:使用shell脚本或者supervisor,两种方法都很简单,各有优劣,只是有一些值得注意的细节...
  • Android中如何设置两个应用程序为同一个进程?1.在&lt;manifest&gt;里面添加:android:sharedUserId,注意这个属性的取值必须包含点(dot),也就是诸如java packae的形式。比如com.aaa.bbb。没有dot的话,...
  • Linux下一个进程究竟会有多少个线程

    千次阅读 2017-10-10 14:53:46
    进程下可以启动最大线程
  • C#/.NET 如何结束掉一个进程

    千次阅读 2019-04-28 09:27:39
    本文介绍如何结束掉一个进程。 本文内容结束掉特定名字的进程结束掉自己 结束掉特定名字的进程 ProcessInfo 中有 Kill 实例方法可以调用,也就是说如果我们能够拿到一个进程的信息,并且对这个进程拥有访问权限,...
  • 个应用程序可能需要启动多个进程! 个应用程序可能需要启动多个进程!! 个应用程序可能需要启动多个进程!!!   1.有时候系统管理员可能只关心现在系统中运行着哪些程序,而不想知道有哪些进程在运行。由于...
  • 、查看gpu的情况 nvidia-smi 二、查看gpu上的进程情况 ...三、次杀死多个gpu进程https://www.cnblogs.com/dingyingsi/p/5305792.html ps -ef | grep firefox | grep -v grep | cut -c 9...
  • Linux系统批量杀死多个进程

    千次阅读 2019-02-11 17:34:04
    批量杀死多个进程的命令 ps -ef|grep name|grep -v grep|cut -c 9-15|xargs kill -9 Linux中的管道符“|”用来隔开两个命令,管道符左边的输出会作为管道符右边命令的输入 ps -ef是查看所有进程的命令。ps是...
  • C语言任务,多进程线程

    千次阅读 2018-04-03 15:44:08
    Linux下多任务机制的介绍多任务处理是指用户在同一时间内运行多个应用程序,每个应用程序被称做个任务。Linux就是个支持多任务的操作系统,它比单任务系统的功能增强了许多。当多任务操作系统使用某种任务调度...
  • 多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成。多进程的数据是分开的、共享复杂,需要用IPC;但同步简单。多线程共享进程数据,共享简单;但同步复杂。  多进程,Windows...
  • 进程和线程的区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    个进程都有自己独立的块内存空间,一个进程可以有多个线程,比如在Windows系统中,个运行的xx.exe就是一个进程。 线程 进程中的个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有个线程...
  • python 彻底解读线程与多进程

    万次阅读 多人点赞 2019-03-26 14:20:34
    title: 线程与多进程 copyright: true top: 0 date: 2019-03-03 16:16:41 tags: 线程多进程 categories: Python高阶笔记 permalink: password: keywords: description: 对python的线程多进程进一步刨析。 真是...
  • 进程描述符:filedescrption,包含执行file结构体的指针 当我们打开一个文件的时候: int fd = open(); 返回的fd对应着一个结构体,file_struct{ ... } 内核中文件结构体中的内容: struct file { ...
  • 一个进程包括由操作系统分配的内存空间,包含一个或多个线程。个线程不能独立的存在,它必须是进程的部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。 线程  又称其为轻量级进程...
  • Qt 之运行一个实例进程

    千次阅读 2016-02-04 17:52:34
    简述发布程序的时候,我们往往...多个实例进程的软件也很多,例如:Visual Studio、Qt Ctretor、QQ…下面我们来介绍下如何实现个实例进程。简述 QSharedMemory QLocalServer QtSingleApplication 任务列表 更多参考QS
  • 多个进程对同一文件写入的问题

    千次阅读 2016-10-14 10:00:14
    讨论关于并发环境下,多个进程对同一文件写入的问题,我们会涉及到文件共享的知识。在开始之前,我们先讨论一些有关文件共享的知识。 1. 文件共享  Unix系统支持在不同进程间共享打开的文件。为此,我们先介绍...
  • 多个进程能否监听同个端口号?

    万次阅读 2016-03-22 22:58:55
    我们都知道socket是网络上两个进程之间的双向通信链路, 即socket = A进程的IP地址:端口号 B进程的IP地址:端口号。 那么有个问题就很有意思了,不同的进程可以监听在同个IP地址:端口号么?根据Unix网络编程中的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,093,475
精华内容 437,390
关键字:

一个进程一定包含多个进程