多线程

第一篇:多线程使用

穿精又带淫゛_ 提交于 2020-03-26 09:48:00
一、创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建、启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThread; // 是否为主线程 + (BOOL)isMainThread; // 是否为主线程 其他用法 获得当前线程 NSThread *current = [NSThread currentThread]; 线程的调度优先级:调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高 + (double)threadPriority; + (BOOL)setThreadPriority:(double)p; 设置线程的名字 - (void)setName:(NSString *)n; - (NSString *)name; 其他创建线程的方式 (2)创建线程后自动启动线程 [NSThread detachNewThreadSelector:@selector(run)

远程线程注入遇到的问题

二次信任 提交于 2020-03-25 21:07:13
前因:   远程线程注入dll的时候debug版的dll注入不成功,release版的dll成功,经过在网上查阅,最后在windows黑客编程技术详解里找到了解决办法 解决办法:    VC项目属性 →配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)   Debug模式选择"MTD",Release选择"MT"(我之前是MD也成功了)   MFC的使用”选项中设置“在静态库中使用MFC”   这个地方还没有弄很明白,如果哪位大佬有知道的还望不吝赐教 来源: https://www.cnblogs.com/ndyxb/p/12569376.html

Python 中的协程 (3) 基础概念

戏子无情 提交于 2020-03-25 15:36:58
1 进程和线程 进程 Process:一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式)。 线程 Thread: 线程是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。线程主要是由CPU寄存器、调用栈和线程本地存储器(Thread Local Storage,TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。线程的本质:线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。 进程和线程的区别:进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些

python GIL

拜拜、爱过 提交于 2020-03-25 12:22:38
Python并不支持真正意义上的多线程。Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意。 Python中有一个被称为Global Interpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。 线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。经过GIL这一道关卡处理,会增加执行的开销。 这意味着,如果你想提高代码的运行速度,使用threading包并不是一个很好的方法。 不过还是有很多理由促使我们使用threading包的。如果你想同时执行一些任务,而且不考虑效率问题,那么使用这个包是完全没问题的,而且也很方便。 但是大部分情况下,并不是这么一回事,你会希望把多线程的部分外包给操作系统完成(通过开启多个进程),或者是某些调用你的Python代码的外部程序(例如Spark或Hadoop),又或者是你的Python代码调用的其他代码(例如,你可以在Python中调用C函数,用于处理开销较大的多线程工作)。 本文首发于 python黑洞网 ,博客园同步更新 来源: https://www.cnblogs.com/pythonzhilian/p/12564974.html

多线程实战2

女生的网名这么多〃 提交于 2020-03-25 11:45:47
3 月,跳不动了?>>> 固定个数的线程池,每个线程处理自己的任务 CountDownLatch countDownLatch = new CountDownLatch(maxThread); 来控制所有任务执行完成。 private static AtomicBoolean RUN_FLAG = new AtomicBoolean(false); private String singleHandler(int pageSize, Integer maxThread) { if (!RUN_FLAG.compareAndSet(false, true)) { log.info("【余额退出】任务进行中,不能再次执行"); return "任务进行中,不能再次执行"; } try { this.handler(pageSize, maxThread); return "处理完成"; } finally { RUN_FLAG.set(false); } } private void handler(int pageSize, Integer maxThread) { if (maxThread == null) { maxThread = 10; } final int maxThreads = maxThread; CountDownLatch countDownLatch =

python多线程完成模拟支付请求

本秂侑毒 提交于 2020-03-25 09:27:50
import asyncioimport sysfrom queue import Queuesys.path.append("../")from tool.__init__ import *from tool.decorator_token import *import timefrom threading import Thread,Lockclass doWeChatNotify(BaseTest): def __init__(self): super().__init__() self.limit_num=100 #查询记录条数 self.WeChatNotify_sql='''select order_id,order_sn from fw_order where `status`=0 and course_id=1569 ORDER BY create_time desc limit %d ;'''%(self.limit_num) self.fwh_test_api=fwh_test_api self.data = self.my_op.sql_operation_fwh(self.WeChatNotify_sql) self.fwh_order_dict = {} self.que = Queue() @token_fwh#验证token有效性 def get

线程概念

百般思念 提交于 2020-03-25 06:57:06
## 线程多线程基础了解 ### 什么是线程,什么是多线程,线程和进程的区别,为什么要有多线程? 线程是cpu执行任务的最小单位 一个进程有1到n的线程组成,比如我们常用的编辑工具打开后就是一个进程,而这个进程就是由多个线程组成 ### 为什么要有线程? 因为线程可以把执行时间长的任务交给后台处理,可以大大节省时间,使程序使用率大大提高 比如我们在处理一个业务时,有一个任务其实对返回结果没有影响,但是执行时间比较长又不得不处理,这里我们就可以用线程,把这个任务交给线程去执行,这样就大大节约了 时间提高了效率 ### 既然有了线程为什么要有多线程呢? 因为有时候任务量太多,可能一个线程处理不过来,这样就可以用多个线程同时处理这样就可以提高效率 比如你开了家餐馆,那么客人来了肯定要做菜,但是你一个人肯定忙不过来,那么就请了两个伙计,一个伙计去买菜,一个伙计去做其他准备工作,你直接负责分配任务就好了,这样 任务就能快速完成 ### 那么是不是线程越多,任务完成的就越快时间用的就越少呢? 答案是否定的,因为线程的执行是cpu分配的,当cpu时间分片分配到执行线程,从上个线程切换到另外一个线程这种上下文切换及启动线程是要花费时间的,这样资源都浪费到上下文切换 上面了,所以并不是线程越多就越好,得根据具体情况来 ### 线程的实现方式 线程有两种一种是继承Thread类

python3--多线程的使用

只谈情不闲聊 提交于 2020-03-25 01:39:45
1、简单使用方法; import threading def sing(name): for i in list(range(3)): print("{}-------正在唱歌------".format(name)) time.sleep(1)def dance(name): for i in list(range(3)): print("{}-------正在跳舞------".format(name)) time.sleep(1)def main(): t1 = threading.Thread(target=sing,args=("张三",)) #参数必须是元组,传一个参数时后面加逗号","; t2 = threading.Thread(target=dance,args=("李四",)) #参数必须是元组,传一个参数时后面加逗号","; t1.start() t2.start()if __name__ == "__main__": main() 2、重写threading.Thread的使用方法; 想创建一个线程对象,只要 继承类threading.Thread ,然后 在__ init__里边调用threading.Thread.__init__()方法 即可。 重写run()方法,将要实现的功能放到此方法中即可。 import threading class

高并发和多线程(1)

廉价感情. 提交于 2020-03-24 18:17:12
进程和线程 进程:一个启动正在运行的程序称之为进程。线程:是 操作系统 能够进行运算 调度 的最小单位。它包含在进程中,是进程执行的最小单元,是一个程序的运行轨迹。 一、synchronized 底层实现原理:synchronized 底层字节码文件是通过monitor指令控制线程,同步代码块儿在获取线程的开始部位添加一个monitorrenter指令,在结束部位添加一个monitorexit指令,入下图所示(代码可以通过javap命令编译查看)。为什么最后会有monitorexit命令,是为了防止中间出现异常,而最后能给正常退出,避免造成死锁。 synchronized 是可重入的锁,可重入锁的意思就是,同一个线程进入同步代码块儿是被允许的,并且在父子类之间也是可重入的。底层原理是当线程获取该锁时,计数器加一,再次获得该锁时继续加一,释放锁时,计数器减一,当计数器值为0时,表明该锁未被任何线程所持有,其它线程可以竞争获取锁。 锁优化 在一个线程要想获取锁就需要向系统内核申请资源,在这个过程是非常消耗资源的,应该是为了避免过度的申请消耗,从而在对象做了手脚;一个java对象由对象标记,类型指针,真实数据,内存补齐四部分组成: 对象标记也称Mark Word字段,存储当前对象的一些运行时数据。 类型指针,JVM根据该指针确定该对象是哪个类的实例化对象。 真实数据自然是对象的属性值。

java中volatile关键字的含义

主宰稳场 提交于 2020-03-24 12:01:31
From: http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。 synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用 synchronized 修饰的方法 或者 代码块。 volatile 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。volatile很容易被误用,用来进行原子性操作。 下面看一个例子,我们实现一个计数器,每次线程启动的时候,会调用计数器inc方法,对计数器进行加一 执行环境——jdk版本:jdk1.6.0_31 ,内存 :3G cpu:x86 2.4G 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 public class Counter