分布式系统之五:进程/线程

来源:互联网 发布:图片二维码识别软件 编辑:程序博客网 时间:2024/04/25 15:43

本博文主要讲诉核心操作系统的进程、线程等

进程

    一个进程由一个执行环境和一个或多个线程组成。

执行环境:

    资源管理的基本单位,它是一个进程的线程所能访问的由本地内核管理的资源集合,可以提供保护而不被外部线程访问。包含:

    1. 一个地址空间:是一组虚拟内存的集合,由内核提供,包含一个固定的、包含程序代码的不可更改的正文区域;一个堆,能向高位扩展;一个栈,能向地位扩展。

    2. 线程同步和通信资源,如信号量和通信接口(例如套接字)

    3. 高级资源,如打开的文件和窗口

建立新进程:

    由操作系统提供的一个不可分割的操作。例如,UNIX的fork系统调用创建一个新的进程,它的执行环境是从其调用进程拷贝得来的;UNIX的exec系统调用是将调用进程转化为执行一个指定名字的程序的代码的进程。

    在分布式系统中,新进程的创建过程可以被划分为两个独立的方面:

    1. 选择目标主机

    2. 创建执行环境(和一个初始线程)

选择目标主机:(策略问题)

    1. 转移策略决定是新进程是在本机运行还是转移给其他机器,是根据本机节点的负载来决定。可以是确定的(节点A转移到节点B),也可以是非确定的(节点A随机转移到B~E之间的任何节点)。

    2. 定位策略决定是选择哪个节点来驻留被转移的进程,这取决于节点的相对负载情况、机器的体系结构和它是否拥有某些特殊资源。

创建执行环境:(两种方式)

    1. 当地址空间是一个静态定义的格式时,地址空间区域可根据指定了地址空间区域范围的列表来创建,然后地址空间区域由一个可执行文件进程初始化或者零填满。

    2. 根据一个已存在的执行环境来定义地址空间。例如UNIX fork操作:新创建的子进程共享父进程的正文区域,同时,它的堆和栈区域在大小上(以及初始内容)是父进程的拷贝。


线程

优点:

    1. 增加操作间并发执行程度

    2. 线程的创建和管理开销比进程少

    3. 共享一个执行环境,也就是说更容易共享资源

    4. 线程间的切换代价低。

线程的创建:

    为线程的栈分配一个区域并为处理器中的寄存器、线程执行状态(初始值可以是SUSPENDED或RUNNABLE),以及优先级提供一个初始值。

线程编程:(java)

    1. Thread(ThreadGroup group,Runnable target,String name),创建一个状态为SUSPENDED的新线程;它属于group;其标识符为name。

    2. setPriority(int newPriority),getPriority()设置和返回线程的优先级

    3. run()如果线程的目标对象有run()方法,线程执行其目标对象的run()方法,否则它执行自己的run()方法,(Thread实现Runnable)。

    4. start()将线程的SUSPENDED状态转换为RUNNABLE状态。

    5. sleep(long millisecs)将线程转换为SUSPENDED状态,并持续指定的时间

    6. yield()进入READY状态并调用调度程序

    7. destroy()销毁程序

    8. join(long millisecs)调用进程阻塞指定的时间,知道thread终止为止

    9. interrupt()中断thread,使其从导致它阻塞的方法(如sleep())返回。

    10. wait(long millisecs, int nanosecs)阻塞调用线程,直到调用object的notify()或notifyAll()方法唤醒线程,或者线程被中断,又或者阻塞了指定的时间为止。

    11. notify(),notifyAll()分别唤醒一个或多个在object上调用的wait()方法的线程。

线程同步:

    共享对象并用于线程协调和合作。因为线程并没有静态(类)变量或对象实例变量的私有拷贝。

    Java提供了synchronized关键字以便程序员为线程的协调指定监视器。程序员可以指定完整的方法,也可以指定任意代码块作为属于某个对象的监控器。监视器可以保证同一时刻最多只有一个线程在执行。

    Java允许通过任何作为条件变量的对象来阻塞或唤醒线程。需要阻塞以等待某一条件的线程调用一个对象的wait()方法。所有的Java对象都实现这一方法,因为它属于Java的根Object类。另外一个线程调用notify()方法来为至多一个等待该对象的线程接触阻塞状态,也可以调用notifyAll()方法为所有等待该对象的线程接触阻塞状态。这两个方法也属于Object类。

    

    由于博主知识有限,如有误,请指正点评,欢迎交流

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 镇魔曲以前的角色怎么办 镇魔曲手游转职后装备怎么办 镇魔曲个性标签任务怎么办 教师资格证申请表打不开怎么办 怎么办appstore换到日本 电脑内存太小怎么办 win10声音卡顿怎么办 录音播放卡顿怎么办 笔记本电脑玩dnf卡怎么办 龙之谷约惠码被删了怎么办 天涯明月刀马没有了怎么办 icloud照片无法同步怎么办 ipad不能下载app怎么办 ipad屏幕孔进水怎么办 ipad无法验证登录怎么办 dnf电脑配置低怎么办 淘宝直播粉丝不够怎么办 电脑页面显示不全怎么办 脸上发痒长痘怎么办 扣扣魔性表情泡泡消失怎么办 脚起小泡泡很痒怎么办 孕妇脚痒起水泡怎么办 孕妇手脚起湿疹怎么办 嘴巴破皮了怎么办 小便刺痛阴唇红肿怎么办 集成墙面挂照片怎么办 苹果电脑网页游戏打不开怎么办 苹果6plus发热怎么办 玩手游手机太卡怎么办 苹果七发烫厉害怎么办 苹果手机延迟高怎么办 王者荣耀总是卡怎么办 王者荣耀卡屏怎么办 王者荣耀网络延迟怎么办 荣耀8手机卡了怎么办 荣耀v10有点卡怎么办 荣耀10有点卡怎么办 8g内存吃鸡会崩怎么办 玩看门狗很卡怎么办 拼多多人数不够怎么办 玩cf想吐怎么办