`
isiqi
  • 浏览: 16453041 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

操作系统之线程

阅读更多

多线程 共享同一个地址空间

多线程流行的原因是因为他能够处理与多进程一样的功能,并且创建线程耗费的时间、资源少,共享进程的资源。
多线程有各自的线程ID,栈,PC,寄存器集合组成。共享代码段,文件,数据。

进程是资源管理的最小单元;而线程是程序执行的最小单元。

多线程相比多进程有很多优势,当需要几个进程执行相同任务时,开销很大,用多线程节省开销。

当RPC时,客户端发出请求,服务器端接收请求,运用多线程可以让服务器同时接受多个并发请求。

线程其实就是进程代码的不同分支。

模型:
1.多对一模型:多个用户线程对应一个内核线程。没有增加并发性。
2.一对一模型:创建用户线程的数量有所规定,因为不能创建太多内核线程。
3.多对多模型:内核线程数量一定,所以无需考虑用户线程的数量,而且也增加了并发性。

当既允许多对多模型也允许一个用户线程绑定到内核线程,称为二级模型。

用户线程不涉及内核,所以开销少。

--------------------------------------------------------------------------------------

java创建线程技术:
实现Runnable接口,并实现void run();函数
Thread th=new Thread(new T(...));
其中T实现了Runnable接口。
th.start();开始子线程。并调用T的run函数。
th.join();等待子线程结束。

class Sum
{
private int sum;
public int getSum()
{
return sum;
}
public void setSum(int value)
{
this.sum=value;
}
}

class Summation implements Runnable
{
private int upper;
private Sum sumValue;
public Summation(int upper,Sum sumValue)
{
this.upper=upper;
this.sumValue=sumValue;
}
public void run()
{
int sum=0;
for(int i=0;i<=upper;i++)
{
sum+=i;
}
sumValue.setSum(sum);
}
}
/**
*
* @author xzdong
*/
public class Driver {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
if(args.length>0){
if(Integer.parseInt(args[0])<0)
System.out.println(args[0]+"must be >=0");
else
{
Sum sum=new Sum();
int upper=Integer.parseInt(args[0]);
Thread thread=new Thread(new Summation(upper,sum));
thread.start();
try{
thread.join();
System.out.println("Sum of "+upper+" is "+sum.getSum());

}catch(Exception e){

}

}
}
else
{
System.err.println("Usage:Summation<intvalue>");
}

}

}

----------------------------------------------------------------------------------------------------------------------------

多线程一起完成任务时,如果一个线程已经完成了目标,则其他线程可以被取消;或者当用户想要取消线程时,则会被取消。
要取消的线程为目标线程。
1.异步取消:立即终止。
2.延迟取消:每次取消之前都要查看是否应该被取消。(好)


信号由特定事件发生,并且信号只能被处理一次。

信号是由内核或进程发送的。
信号是进程间通信的一种方式,一个特定的信号是一个整数。

当单线程时,只要把信号发送给进程。不用考虑选择哪个线程发送。
当多线程时,需要考虑发给每个线程还是产生事件的线程,还是一个规定接受信号的线程。
同步信号:信号发送给产生信号的进程。
异步信号:发送给其他进程不相关的进程。比如终止进程。

对于同步信号,信号发送给特定的产生信号的线程。

对于信号处理,可以按照默认信号处理程序,也可以按照用户特定信号处理程序。

虽然多线程能节省时间,但是也会花费时间,并且无限创建线程会导致资源耗尽,因而引出线程池。

线程池:在进程开始时就创建一定数量的线程放在池子里。
如果需要一个线程,就拿出去,用完再放回来,不用销毁。
如果线程池的线程被拿光了,还要线程时,就等待线程池有空线程为止。
java.util.concurrent

线程特定数据:由于线程共享进程的数据,但是如果线程想要有自己的特定数据时,就需要线程特定数据。

轻量级进程作用:继承内核的资源,连接用户线程。

LWP是需要内核支持的用户线程,一个内核线程对应一个LWP,因此不能有太多的LWP

LWP线程库建立在内核之上,许多操作要进行系统调用,而用户线程不需要内核支持。

分享到:
评论

相关推荐

    操作系统—线程

    操作系统—线程

    操作系统原理线程概念与应用 操作系统原理线程概念与应用

    线程作为操作系统中的基本执行单元,是程序执行的最小单位,它比进程更轻量级,允许程序在同一时间执行多个不同的任务。本文将深入探讨操作系统原理中的线程概念及其应用。 线程的概念: 线程是进程中的一个执行...

    重大软院操作系统实验二:线程调度

    线程调度是操作系统内核的核心功能之一,它的主要目标是决定哪个线程应该在何时获得CPU的使用权。线程调度算法有多种,如先来先服务(FCFS)、短作业优先(SJF)、优先级调度(包括抢占式和非抢占式)以及轮转法...

    操作系统线程实验报告

    操作系统线程实验报告主要探讨了线程调度执行和线程在内存空间中的特性的理解,以及如何使用POSIX规范中的pthread_create()函数。实验目的是帮助学生深入理解线程与进程的区别,掌握线程的创建和调度。 实验环境...

    操作系统多线程的创建

    操作系统中的多线程技术是现代计算机程序设计的重要组成部分,它允许多个执行流在单个进程中并发运行,从而提高系统资源的利用率和程序的执行效率。在这个“操作系统多线程的创建”主题中,我们将深入探讨多线程的...

    操作系统实验-线程的创建和撤消.pdf

    操作系统实验-线程的创建和撤消 一、 操作系统实验目的 本实验的主要目的是了解进程与线程的概念,并掌握线程的创建和撤消。通过实验,我们可以更好地理解线程的基本概念和操作系统对线程的管理。 二、 线程的...

    操作系统实验报告——线程与进程同步

    操作系统实验报告——线程与进程同步,主要探讨了在Linux环境下如何实现进程和线程的同步,以解决经典的生产者-消费者问题。该实验旨在帮助学生掌握操作系统提供的同步机制,并深化对经典同步问题的理解。 实验内容...

    四川大学操作系统Nachos线程升级实验代码及实验报告

    操作系统是计算机科学中的核心课程之一,它管理并控制计算机硬件和软件资源,为应用程序提供运行环境。在四川大学的操作系统实验中,学生们有机会深入学习和实践操作系统的基本概念,特别是通过Nachos项目。Nachos是...

    操作系统线程通信课程设计

    在这个"操作系统线程通信课程设计"中,我们将深入探讨以下几个核心知识点: 1. **多线程任务转换与通信**:在多任务环境下,操作系统可以同时调度多个线程执行不同的任务。线程间的通信是实现任务协调和数据共享的...

    操作系统实验 线程同步机制

    锁机制是操作系统中最基本的同步机制之一。锁机制的主要作用是保护共享资源免受多个线程的访问,从而避免了数据不一致和系统崩溃的问题。在 Nachos 操作系统中,锁机制是通过 Lock 类来实现的。 Lock 类中有两个...

    操作系统线程同步实验报告

    操作系统线程同步是多线程编程中的核心概念,旨在确保并发执行的线程在访问共享资源时不会引发数据不一致性和竞态条件。本实验报告详细探讨了这一主题,通过一个简单的银行账户转账的示例来揭示临界区问题及其解决...

    操作系统线程管理

    操作系统进程(线程)管理课件

    北京大学操作系统 进程线程模型ppt2

    上下文切换是操作系统调度中的关键操作之一。 #### 二、线程模型 **1. 线程的使用** 线程是比进程更轻量级的执行单元,可以在同一进程内并发执行,共享进程的资源。例如,在字处理软件中,可以有多个线程分别负责...

    操作系统线程同步算法

    操作系统中的线程同步是多线程编程中一个关键的概念,它确保了多个线程在访问共享资源时的正确性,防止数据竞争和其他并发问题。在Windows操作系统中,提供了多种线程同步机制,如临界区、事件、信号量以及互斥量等...

    操作系统进线程

    关于操作系统进程线程

    操作系统-创建多线程-读者写者

    在计算机科学中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,而每个线程都拥有独立的执行路径。多线程技术可以显著提高应用程序的性能,...

    操作系统上机-Linux多线程编程

    在操作系统的学习过程中,掌握Linux多线程编程是至关重要的技能之一。Linux作为一款广泛使用的开源操作系统,其强大的系统调用接口和丰富的库函数为开发者提供了实现多线程应用的便利条件。多线程编程允许程序同时...

    操作系统线程编程

    线程多线程实验线程多线程实验线程多线程实验线程多线程实验线程多线程实验线程多线程实验线程多线程实验

Global site tag (gtag.js) - Google Analytics