精华内容
下载资源
问答
  • 多线程优点

    2017-06-05 16:13:14
    多线程优点 原文:http://tutorials.jenkov.com/java-concurrency/benefits.html 作者:Jakob Jenkov 翻译:古圣昌 校对:欧振聪 尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是: ...


    via:http://ifeve.com/benefits/
    多线程的优点

    原文:http://tutorials.jenkov.com/java-concurrency/benefits.html

    作者:Jakob Jenkov        翻译:古圣昌            校对:欧振聪

    尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:

    • 资源利用率更好
    • 程序设计在某些情况下更简单
    • 程序响应更快

    资源利用率更好

    想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:

    5秒读取文件A
    2秒处理文件A
    5秒读取文件B
    2秒处理文件B
    ---------------------
    总共需要14秒
    

    从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据。在这段时间里,CPU非常的空闲。它可以做一些别的事情。通过改变操作的顺序,就能够更好的使用CPU资源。看下面的顺序:

    5秒读取文件A
    5秒读取文件B + 2秒处理文件A
    2秒处理文件B
    ---------------------
    总共需要12秒
    

    CPU等待第一个文件被读取完。然后开始读取第二个文件。当第二文件在被读取的时候,CPU会去处理第一个文件。记住,在等待磁盘读取文件的时候,CPU大部分时间是空闲的。

    总的说来,CPU能够在等待IO的时候做一些其他的事情。这个不一定就是磁盘IO。它也可以是网络的IO,或者用户输入。通常情况下,网络和磁盘的IO比CPU和内存的IO慢的多。

    程序设计更简单

    在单线程应用程序中,如果你想编写程序手动处理上面所提到的读取和处理的顺序,你必须记录每个文件读取和处理的状态。相反,你可以启动两个线程,每个线程处理一个文件的读取和操作。线程会在等待磁盘读取文件的过程中被阻塞。在等待的时候,其他的线程能够使用CPU去处理已经读取完的文件。其结果就是,磁盘总是在繁忙地读取不同的文件到内存中。这会带来磁盘和CPU利用率的提升。而且每个线程只需要记录一个文件,因此这种方式也很容易编程实现。

    程序响应更快

    将一个单线程应用程序变成多线程应用程序的另一个常见的目的是实现一个响应更快的应用程序。设想一个服务器应用,它在某一个端口监听进来的请求。当一个请求到来时,它去处理这个请求,然后再返回去监听。

    服务器的流程如下所述:

    while(server is active){
        listen for request
        process request
    }
    

    如果一个请求需要占用大量的时间来处理,在这段时间内新的客户端就无法发送请求给服务端。只有服务器在监听的时候,请求才能被接收。另一种设计是,监听线程把请求传递给工作者线程(worker thread),然后立刻返回去监听。而工作者线程则能够处理这个请求并发送一个回复给客户端。这种设计如下所述:

    while(server is active){
        listen for request
        hand request to worker thread
    }
    

    这种方式,服务端线程迅速地返回去监听。因此,更多的客户端能够发送请求给服务端。这个服务也变得响应更快。

    桌面应用也是同样如此。如果你点击一个按钮开始运行一个耗时的任务,这个线程既要执行任务又要更新窗口和按钮,那么在任务执行的过程中,这个应用程序看起来好像没有反应一样。相反,任务可以传递给工作者线程(word thread)。当工作者线程在繁忙地处理任务的时候,窗口线程可以自由地响应其他用户的请求。当工作者线程完成任务的时候,它发送信号给窗口线程。窗口线程便可以更新应用程序窗口,并显示任务的结果。对用户而言,这种具有工作者线程设计的程序显得响应速度更快。

    展开全文
  • 多线程优点及同步方式

    千次阅读 2016-07-31 16:58:24
    一、多线程优点 1.通常启动一个进程,要为该进程分配独立的地址空间,建立多个数据表来维护进程的代码段、堆栈段和数据段,比较耗费系统资源。一个进程创建多线程可以使用相同的地址空间,共享大部分数据,启动一个...

    一、多线程优点

    1.通常启动一个进程,要为该进程分配独立的地址空间,建立多个数据表来维护进程的代码段、堆栈段和数据段,比较耗费系统资源。一个进程创建多线程可以使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于进程所需空间,而且启动线程花费的时间也比进程花费时间少很多。

    2.线程间通讯方便,以为线程之间具有共同的地址空间,共享大部分数据资源

    3.提高应用响应速度,将耗时工作放在非UI线程中处理

    4.使多CPU系统更加有效,多线程可在不同的CPU上运行

    5.改善程序设计结构,易于理解和阅读



    二、线程同步的方式

    1.互斥量

    linux实现方式:

    pthread_mutex_t mutex; 创建互斥量

    pthread_mutex_init 初始化互斥量,初始化时可设置不同的互斥量属性,来区分互斥量是用于线程间还是进程间

    pthread_mutex_lock 申请互斥量

    pthread_mutex_unlock 释放互斥量

    2.条件变量

    linux实现方式:

    pthread_cond_t cond; 定义条件变量

    pthread_cond_init 初始化条件变量,初始化时可设置条件变量的属性结构,区分条件变量用于线程间还是进程间,通常用于线程间

    pthread_cond_wait 使线程阻塞在条件变量上,需与互斥量结合使用

    pthread_cond_signal/pthread_cond_broadcast 唤醒线程

    3.信号量

    信号量本质是一个非负整数,用来控制对公共资源的访问。

    linux实现方式:

    sem_t sem; 定义信号量

    sem_init 初始化信号量,同时可设置信号量用于线程间还是进程间

    sem_post  增加资源数量

    sem_wait/sem_trywait 获取资源,前者阻塞式,后者非阻塞式

    sem_destroy  释放信号量

    4.临界区

    windows下同步方式,同步速度比较快,但是只能同步同一进程下的多线程

    5.事件

    展开全文
  • 02多线程优点

    2018-09-05 10:08:08
    总的概括来说,多线程优点是: 资源利用率更高 程序设计在某些情况下更简单 程序响应更快 下面逐一进行一下说明: 资源利用率更好 想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说...

    总的概括来说,多线程的优点是:

    • 资源利用率更高
    • 程序设计在某些情况下更简单
    • 程序响应更快

    下面逐一进行一下说明:

    资源利用率更好

    想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:

    1 5秒读取文件A
    2 2秒处理文件A
    3 5秒读取文件B
    4 2秒处理文件B
    5 ---------------------
    6 总共需要14


    CPU等待第一个文件被读取完。然后开始读取第二个文件。当第二文件在被读取的时候,CPU会去处理第一个文件。记住,在等待磁盘读取文件的时候,CPU大部分时间是空闲的。从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据。在这段时间里,CPU非常的空闲。它可以做一些别的事情。通过改变操作的顺序,就能够更好的使用CPU资源。看下面的顺序:

    1 5秒读取文件A
    2 5秒读取文件B + 2秒处理文件A
    3 2秒处理文件B
    4 ---------------------
    5 总共需要12


    总的说来,CPU能够在等待IO的时候做一些其他的事情。这个不一定就是磁盘IO。它也可以是网络的IO,或者用户输入。通常情况下,网络和磁盘的IO比CPU和内存的IO慢的多

    程序设计更简单

    单线程应用程序中,如果你想编写程序手动处理上面所提到的读取和处理的顺序,你必须记录每个文件读取和处理的状态。相反,你可以启动两个线程,每个线程处理一个文件的读和写操作。线程会在等待磁盘读取文件的过程中被阻塞。在等待的时候,其他的线程能够使用CPU去处理已经读取完的文件。其结果就是,磁盘总是在繁忙地读取不同的文件到内存中。这会带来磁盘和CPU利用率的提升。而且每个线程只需要记录一个文件,因此这种方式也很容易编程实现。

    程序响应更快

    将一个单线程应用程序变成多线程应用程序的另一个常见的目的是实现一个响应更快的应用程序。设想一个服务器应用,它在某一个端口监听进来的请求。当一个请求到来时,它去处理这个请求,然后再返回去监听。

    如果一个请求需要占用大量的时间来处理,在这段时间内新的客户端就无法发送请求给服务端。只有服务器在监听的时候,请求才能被接收。另一种设计是,监听线程把请求传递给工作者线程(worker thread),然后立刻返回去监听。而工作者线程则能够处理这个请求并发送一个回复给客户端。

    这种方式,服务端线程迅速地返回去监听。因此,更多的客户端能够发送请求给服务端。这个服务也变得响应更快。

    桌面应用也是同样如此。如果你点击一个按钮开始运行一个耗时的任务,这个线程既要执行任务又要更新窗口和按钮,那么在任务执行的过程中,这个应用程序看起来好像没有反应一样。相反,任务可以传递给工作者线程(word thread)。当工作者线程在繁忙地处理任务的时候,窗口线程可以自由地响应其他用户的请求。当工作者线程完成任务的时候,它发送信号给窗口线程。窗口线程便可以更新应用程序窗口,并显示任务的结果。对用户而言,这种具有工作者线程设计的程序显得响应速度更快。

    其实在实际开发过程中,也是这样。如果只是简简单单的完成一个模块程序的编写,那可能不会有什么技术上实现的难度,对于目前的业务需求来说。但是作为程序开发的我们要注意程序的执行效率,以及良好程序的编写,也只有这样,才会更加的给客户提供良好的用户体验。

    展开全文
  • 文章目录进程和多线程概念理解以及线程的优点 进程和多线程概念理解以及线程的优点 在我们使用计算机的时候我们很经常边听歌边打代码或者干其他的事情,大这里以windows系统来说,在系统的windows任务管理器的进程...

    进程和多线程概念理解以及线程的优点

    在我们使用计算机的时候我们很经常边听歌边打代码或者干其他的事情,大这里以windows系统来说,在系统的windows任务管理器的进程选项可以看到:
    在这里插入图片描述
    可能会觉得有点抽象难以理解,大家在上面看到的exe程序其实就可以理解成一个“进程”
    在这里插入图片描述

    那么怎么理解“线程”呢,线程可以理解成是在进程中独立运行的一个子任务,最简单的理解就是假如你在玩微信,你可以同时和别人视频和聊天还可以发送文件,这样应该可以理解了,那么多线程到底有什么优点呢?

    优点

    如果在这里有对于使用“多任务操作系统”的一些经验的话,最简单的就比如我们常使用的windows系列的,都会有这样一个体会:使用多任务操作系统windows之后可以最大限度的利用CPU的空闲时间来去处理其他的任务,CPU在这些任务之间不断的切换,它的速度非常快,这样使用者的感受就是似乎是在同时进行的一样。
    在这里做一个简单的图形便于大家理解一下:

    单任务环境下:
    在这里插入图片描述
    多任务环境下:
    在这里插入图片描述
    在这个多任务运行环境图也可以看出,CPU在任务一和任务二之间来回的切换,这样任务二就不用等100s之后再运行了,效率就大大提高了,这就是多线程的“异步”
    注意
    一个进程正在运行的时候至少会有一个线程在运行

    简单多线程举例

    上面的注意事项说过了,这种情况在java当中当然也是存在的,这些线程就在后台执行,比如我们最常用的public static void main()这个方法的线程就是由JVM创建的,例如:

    package test;
    
    public class Test {
    	public static void main(String[] args) {
    		System.out.println(Thread.currentThread().getName());
    		System.out.println(Thread.currentThread().getPriority());
    	}
    }
    
    

    运行结果:
    在这里插入图片描述
    在这里解释一下,在控制台中输出的main其实就是有一个名叫main的线程在执行main()方法中的代码,在控制台中的main和main方法是没有任何关系的,仅仅就只是名字相同而已

    继承Thread类(实现方法)

    在java的JDK中其实已经自带了很多对多线程技术的支持了,可以很方便的进行多线程编程,实现多线程编程有两种方式:
    1、继承Thread类
    2、实现Runnable接口
    在这里简单说明一下:首先讲一下Thread类的结构:

    public class Thread implements Runnable
    

    在这里也可以看出,Thread类实现了Runnable接口,它们之间其实是多态关系
    在使用方式一去实现多线程的时候会发现,由于java单继承的特点所以很不方便,所以呢为了支持多继承,完全就可以实现Runnable接口的方式,在这里呢也同样将方式一举个小栗子:

    方法一

    假设创建一个名为Demo的java项目:
    创建一个包名为MyThread以及一个类名为mythread去直接继承Thread类并且重写一下它的run方法:
    在这里插入图片描述
    现在用另一个类去继承它:
    在这里插入图片描述
    运行结果:
    在这里插入图片描述
    在这里可以看出在mythread.java类中的run方法比较晚执行,在这里也告诉我们:代码运行的结果与执行顺序或者调用顺序是无关的,线程是一个子任务,CPU以不确定的方式(随机)去调用线程中的run方法,所以可以看到是反过来的结果——线程调用的随机性体现

    方法二

    实现Runnable接口(常用)
    在这里插入图片描述
    在这里插入图片描述
    运行结果:
    在这里插入图片描述
    在这里强调一句,Thread.java类其实也实现了Runnable接口,在这里也就意味着一点:构造函数Thread(Runnable target) 不光可以传入Runnable 接口的对象,还可以传入一个Thread类的对象,这样做就可以将一个Thread对象中的run()方法交给其他的线程使用了

    展开全文
  • 主要讲解了关于Python多线程的一些例子和高并发的一些应用场景# -*- coding: utf-8 -*-# @Author: Clarence# @Date: 2018-02-28 20:39:31# @Last Modified by: Clarence# @Last Modified time: 2018-02-28 23:29:54...
  • “高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现。高并发是一种系统运行过程...
  • 进程Python提供multiprocessing模块来实现进程,可以跨平台版本,multiprocessing模块提供了Process 类来表示一个进程对象。Linux/Unix操作系统提供了fork()系统调用,来实现父子进程。子进程永远返回0,父进程...
  • 从互联网发展以来,多线程一直是java不可避免的一个阑槛,现在的项目几乎没有不用到多线程的了,所以多了解了解多线程的相关面试题对面试相信会有非常大的帮助,下面一起来看看常问到的多线程面试题有哪些吧。一、...
  • 这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看...
  • 本文为转载学习原文链接:http://tutorials.jenkov.com/java-concurrency/benefits.html尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快...
  • 尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:* 资源利用率更好* 程序设计在某些情况下更简单* 程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。...
  • 对于第一次接触到python这门编程语言的朋友来说,刚刚开始学习python多线程的时候,对于python多线程这一方面的了解比较少,在这篇文章之中我们就来了解一下python多线程优点。废话不多说,我们开始进入这篇文章之...
  • 多线程优点提高资源利用率如读取一个目录下的所有文件,如果采用单线程模型,则从磁盘读取文件的时候,大部分CPU用于等待磁盘去读取数据。如果是采用多线程并发执行,则CPU可以在等待IO的时候去做其他的事情,以...
  • 多线程优点和代价

    2017-08-11 13:18:24
    多线程优点:http://ifeve.com/benefits/ 资源利用率更好 程序设计在某些情况下更简单 程序响应更快序响应更快 while(server is active){ listen for requesthand request to worker thread } 多线程的代价:...
  • 作者:Jakob Jenkov 翻译:古圣昌 校对:欧振聪尽管面临很多挑战,在java学习中多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个...
  • 多线程优点

    2018-02-08 14:01:57
    尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说...
  • 1.1、进程与多线程的概念、多线程优点 1.1.1、进程与多线程的概念 进程:是受操作系统管理的基本运行单元。 线程:可理解为在进程中独立运行的子单元。 1.1.2、多线程优点 示例:任务1是等待远程服务器...
  • 对于第一次接触到python这门编程语言的朋友来说,刚刚开始学习python多线程的时候,对于python多线程这一方面的了解比较少,在这篇文章之中我们就来了解一下python多线程优点。废话不多说,我们开始进入这篇文章之...
  • 浅谈Java多线程优点及代码示例发布于 2021-1-23|复制链接摘记: 尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下...
  • 尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说...
  • 简介这章会讲解一些java多线程的基础知识使用多线程优点尽可能发挥多核cpu的作用线程是大多数操作系统调度的基本单位 (因为一个核上面同时只能执行一个线程,操作系统按照时分的形式 进行调度, 线程会分配到若干...
  • 使用多线程优点

    2019-10-05 12:55:10
    多线程优点: 1.提高应用程序的响应。对图形化界面更有意义,可增加用户体验。 2.提高计算机系统CPU的利用率 3.改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改 java中的线程分为两个类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,014
精华内容 2,805
关键字:

多线程优点