为何需要创建线程

个人以为是为了提高CPU利用率。线程给操作系统带来的创建维护和管理负担要轻。因为与线程相关的信息比较少,交情的负担意味着线程的代价或开销比较少。当处理器除一个进程并激活另一个进程时,就要发生上下文切换。为了发生上下文切换,操作系统必须启动和重新启动每个进程所需的信息。这就意味着必须保存描述进程存在状态的有关信息,在进程再次激活时,就可以从离开的地点继续执行。那么系统在进程切换时需要保存那些信息呢?下面一一列举

1、所需信息包括可执行程序、堆栈、以及静态与动态分配变量内存的指针。

2、寄存器组中包含执行下一条指令的指针这样的信息 。

3、重新任命进程时需要进程的状态(进程是被挂起还是被阻塞)和优先权。同时程序的I/O状态也被保存。

4、保存进程的规划信息,内存管理信息以及计数信息。

5、进程需要文件描述器和读写指针来继续使用资源。

而线程同样需要上下文。当线程被抢先时同样也会发生上下文切换。

与进程相比线程的优势如下:

1、线程不需要地址空间。线程包含在进程的地址空间中。(所以在重新任命进程时所需的线程都不需要)

2、线程的上下文只包含一个堆栈、一个寄存器组和一个优先权。

3、寄存器组包含程序或指令指针以及堆栈指针。

4、线程的文本包含在他的进程的文本中。

5、进程拥有的所有资源都属于线程。所以与资源相关的所有信息不是线程上下文的部分。

6、其他信息如规划、计数等都是由进程所定义。无需包含在线程的上下文中。

线程与进程的相同之处是:都有ID,寄存器组、状态、以及优先权。线程与子进程共享父进程的资源。

他们的不同之处是:

1、线程没有自己的地址空间,如果进程创建了多个所有的线程都将包含在他的地址空间中。

2、父进程和子进程之间必须通过进程间通信机制来进行通信。而进程中的多个线程之间是通过读取和写入数据到进程变量来通信。

3、子进程对其他子进程不施加控制,而进程的线程被看做同位体(peer)并对进程的其他的线程施加控制。

为何需要创建线程,布布扣,bubuko.com

时间: 2024-10-03 04:18:17

为何需要创建线程的相关文章

多线程_创建线程_继承Thread类

public class ThreadDemo {   public static void main(String[] args){         Demo d = new Demo();   d.start();      for(int i = 0;i < 100;i++){      System.out.println("MainThread" + i);   }   } } class Demo extends Thread {   public void run(

Java并发编程:如何创建线程

一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看).Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话,只会创建一个线程,通常称为主线程.但是要注意,虽然只有一个线程来执行任务,不代表JVM中只有一个线程,JVM实例在创建的时候,同时会创建很多其他的线程(比如垃圾收集器线程). 由于Java采用的是单线程编

Java多线程——创建线程的两种方式

创建线程方式一:继承Thread类. 步骤:1,定义一个类继承Thread类.2,覆盖Thread类中的run方法.3,直接创建Thread的子类对象创建线程.4,调用start方法开启线程并调用线程的任务run方法执行. 可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)主线程的名字就是main. 例: class Demo extends Thread { private String name; Demo(String name) { super(name)

Java创建线程的三种方式

1.继承Runnable接口 package test; class RunnableDemo implements Runnable{ private Thread t; private String threadName; RunnableDemo(String name){ threadName=name; System.out.println("Creating "+name); } public void run(){ System.out.println("Run

创建线程的两种方式

首先我们需要知道什么是线程:是程序执行流的最小单元,包括就绪.阻塞和运行三种基本状态. 举个简单的例子:我们把生活中的两件事吃饭和写作业当作是两个线程,当你正在写作业的时候,爸妈叫你吃饭,你就直接去了,等吃完饭回来后再接着写作业.这就是相当于两个线程其中一个从运行状态转入就绪状态,另一个线程从就绪状态转入运行状态. 创建线程包括继承Thread类和实现Runnable接口两种方式(JDK5.0以后还包括了实现Callable等方式来实现线程,这里不做介绍,感兴趣的小伙伴可以自己查资料),下面介绍

驱动开发之 创建线程函数PsCreateSystemThread

PsCreateSystemThread 创建一个执行在内核模式的系统线程. 注意:创建线程必须用函数PsTerminateSystemThread强制线程结束.否则该线程是无法自动退出的. 函数原型: [cpp] view plain copy print? NTSTATUS PsCreateSystemThread( _Out_      PHANDLE ThreadHandle, _In_       ULONG DesiredAccess, _In_opt_   POBJECT_ATTR

(转)java创建线程的两种方法比较

Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法:  ◆实现Runnalbe接口,重载Runnalbe接口中的run()方法. 为什么Java要提供两种方法来创建线程呢?它们都有哪些区别?相比而言,哪一种方法更好呢? 在Java中,类仅支持单继承

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但是,你应该明白,在每个线程中动态分配和销毁内存块,是需要同步保护的.Delphi语言中有一个在使用多线程环境下至关重要的全局变量IsMultiThread,系统在进行内存分配的时候,根据IsMultiThread变量值判断当前是否使用在多线程环境下,如果该变量为True,哪么,系统在分配和销毁内存的

C++:创建线程初试

1.使用CreatThread创建 #include <iostream> #include <Windows.h> using namespace std; /* 创建一个线程 */ DWORD WINAPI fun(LPVOID ipParamter) { while (true) { cout << "fun1 display!" << endl; Sleep(1000); } } /* 创建第二个线程 */ DWORD WINAP