线程同步和异步

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

好处

使用线程可以把占据时间长的程序中的任务放到后台去处理

用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

程序的运行速度可能加快

在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。

多线程技术在IOS软件开发中也有举足轻重的位置

坏处

如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。

线程可能会给程序带来更多“bug”,因此要小心使用。

线程的中止需要考虑其对程序运行的影响。

通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。

同步和异步
异步:一个进程启动的多个不相干线程(两个线程之间没什么关系各干各的 ),它们相互之间关系为异步。

同步:线程同步是指多个线程同时访问同一个资源的时候,如果一个线程在访问资源,另一个线程要等待直到访问线程结束掉。才可以访问资源。

实现同步机制

临界区、互斥区、事件、信号量四种方式 临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别

1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享

3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目

4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作

时间: 2024-10-12 17:38:48

线程同步和异步的相关文章

多线程编程——线程同步与异步

1.多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是,多线程和异步操作还是有一些区别的.而这些区别造成了使用多线程和异步操作的时机的区别. 2.异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础. 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘.光驱的技术规格中都有明确DMA的模式指标,其实网卡.声卡.显卡也是有DMA

多线程-线程同步、异步

同步和异步 同步和异步通常用来形容一次方法的调用.同步方法调用一旦开始,调用者必须完成所有的操作一直到方法调用结束,其他调用者才能继续后续的行为, 异步方法调用类似一个消息传递,一旦开始,方法调用就会立即返回,其他调用者则可以无需等待,可以立即继续后续的操作. 异步: 不过, 如果 我们 赶时髦, 就坐 在家 里 打开 电脑, 在 网上 订购 了 一台 空调. 当你 完成 网上 支付 的 时候, 对 你来 说 购物 过程 已经 结束 了. 虽然 空调 还没 送 到家, 但是 你的 任务 都已 经

线程同步与异步套接字编程(二)

接下来我们介绍利用关键代码段实现线程同步的方法. 关键代码段(临界区)工作在用户方式下.它是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权. 关键代码段机制,创建---进入---离开---删除. 1 InitializeCriticalSection( 2 LPCRITICAL_SECTION lpCriticalSection 3 ); 创建初始化函数参数是一个out类型,即作为返回值使用.因此在之前我们需要构造一个CRITICAL_SECTION结构型对象,然后将该对象地址传

第16章 线程同步与异步套接字

转自: https://blog.csdn.net/u014162133/article/details/46573873 原文地址:https://www.cnblogs.com/happykoukou/p/9379167.html

线程的同步和异步

多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是,多线程和异步操作还是有一些区别的.而这些区别造成了使用多线程和异步操作的时机的区别. 异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础. 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘.光驱的技术规格中都有明确DMA的模式指标,其实网卡.声卡.显卡也是有DMA功能的.

(转) Java多线程同步与异步

Java线程 同步与异步 线程池1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲 系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制 同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求 不到,怎么办,A线程只能等待下去

Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享<Python中的进程.线程.协程.同步.异步.回调>. 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状

使用C++11 开发一个半同步半异步线程池

摘自:<深入应用C++11>第九章 实际中,主要有两种方法处理大量的并发任务,一种是一个请求由系统产生一个相应的处理请求的线程(一对一) 另外一种是系统预先生成一些用于处理请求的进程,当请求的任务来临时,先放入同步队列中,分配一个处理请求的进程去处理任务, 线程处理完任务后还可以重用,不会销毁,而是等待下次任务的到来.(一对多的线程池技术) 线程池技术,能避免大量线程的创建和销毁动作,节省资源,对于多核处理器,由于线程被分派配到多个cpu,会提高并行处理的效率. 线程池技术分为半同步半异步线程

java 线程之对象的同步和异步

一.多线程环境下的同步与异步 同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去. package com.jalja.org.thread.demo01; public class Thread02 { public synchronized void method1(){ System.out.println("method1:"+Thread.currentThread().getName()); try { T