多线程

[Python] 多线程相关

落花浮王杯 提交于 2020-03-21 09:48:33
3 月,跳不动了?>>> 1 相关基础 Python3 线程中常用的两个模块为: _thread threading(推荐使用) thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 "_thread"。 1.1 _thread 模块函数式调用 _thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程。语法如下: _thread.start_new_thread ( function, args[, kwargs] ) 参数说明: function - 线程函数。 args - 传递给线程函数的参数,他必须是个tuple类型。 kwargs - 可选参数。 1.2 threading 模块对象式调用 threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法。 除了使用函数外,线程模块同样可以通过直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程。 import threading import time

C++11并发——多线程条件变量std::condition_variable(四)

人走茶凉 提交于 2020-03-20 18:28:29
https://www.jianshu.com/p/a31d4fb5594f https://blog.csdn.net/y396397735/article/details/81272752 https://www.cnblogs.com/haippy/p/3252041.html std::condition_variable 是条件变量, 当 std::condition_variable 对象的某个 wait 函数被调用的时候,它使用 std::unique_lock(通过 std::mutex) 来锁住当前线程。 当前线程会一直被阻塞,直到另外一个线程在相同的 std::condition_variable 对象上调用了 notification 函数来唤醒当前线程。 std::condition_variable 对象通常使用 std::unique_lock<std::mutex> 来等待,如果需要使用另外的 lockable 类型,可以使用 std::condition_variable_any 类,本文后面会讲到 std::condition_variable_any 的用法。 #include <iostream> // std::cout #include <thread> // std::thread #include <mutex> // std:

什么是 Event Loop?

梦想与她 提交于 2020-03-20 13:58:13
3 月,跳不动了?>>> Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。 JavaScript语言就采用这种机制,来解决单线程运行带来的一些问题。 本文参考C. Aaron Cois的 《Understanding The Node.js Event Loop》 ,解释什么是Event Loop,以及它与JavaScript语言的单线程模型有何关系。 想要理解Event Loop,就要从程序的运行模式讲起。运行以后的程序叫做 “进程” (process),一般情况下,一个进程一次只能执行一个任务。 如果有很多任务需要执行,不外乎三种解决方法。 (1)排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。 (2)新建进程。使用fork命令,为每个任务新建一个进程。 (3)新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。(进程和线程的详细解释,请看 这里 。) 以JavaScript语言为例,它是一种单线程语言,所有任务都在一个线程上完成,即采用上面的第一种方法。一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现”假死”,因为JavaScript停不下来,也就无法响应用户的行为。 你也许会问,JavaScript为什么是单线程,难道不能实现为多线程吗? 这跟历史有关系

Linux 多线程通信

岁酱吖の 提交于 2020-03-20 04:45:10
摘自资料(linux 与Windows不同) 线程间无需特别的手段进行通信,由于线程间能够共享数据结构,也就是一个全局变量能够被两个线程同一时候使用。只是要注意的是线程间须要做好同步,一般用mutex。能够參考一些比較新的UNIX/Linux编程的书,都会提到Posix线程编程,比方《UNIX环境高级编程(第二版)》、《UNIX系统编程》等等。 linux的消息属于IPC,也就是进程间通信,线程用不上。 linux用pthread_kill对线程发信号。 另:windows下不是用post..(你是说PostMessage吗?)进行线程通信的吧? windows用PostThreadMessage进行线程间通信,但实际上极少用这样的方法。还是利用同步多一些 LINUX下的同步和Windows原理都是一样的。只是Linux下的singal中断也非常好用。 用好信号量,共享资源就能够了。 使用多线程的理由之中的一个是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而执行于一个进程中的多个线程,它们彼此之间使用同样的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,并且

SpringBoot 多线程

岁酱吖の 提交于 2020-03-20 03:05:15
Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor。而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync 开启对异步任务的支持,并通过实际执行Bean的方法中使用@Async注解来声明其是一个异步任务。 示例: 1.配置类。 package com.cnpiec.ireader.config; import java.util.concurrent.Executor; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org

多线程 NSThread

霸气de小男生 提交于 2020-03-20 03:03:47
多线程 NSThread 创建和启动线程 一个NSThread对象就代表一条线程 创建、启动线程 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]; 线程的调度优先级 + (double)threadPriority; + (BOOL)setThreadPriority:(double)p; - (double)threadPriority; - (BOOL)setThreadPriority:(double)p; 调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高 线程的名字 - (void)setName:(NSString *)n; - (NSString *)name; 其他创建线程方式

iOS多线程的初步研究(三)-- NSRunLoop

假装没事ソ 提交于 2020-03-20 03:02:46
弄清楚 NSRunLoop确实 需要花时间,这个类的概念和模式似乎是Apple的平台独有(iOS+MacOSX),很难彻底搞懂(iOS没开源,呜呜)。 官网的解释是说run loop可以用于处理异步事件,很抽象的说法。不罗嗦,先看看NSRunLoop几个常用的方法。 + ( NSRunLoop *)currentRunLoop; //获得当前线程的run loop + (NSRunLoop *)mainRunLoop; //获得主线程的run loop - ( void )run; //进入处理事件循环,如果没有事件则立刻返回。注意:主线程上调用这个方法会导致无法返回(进入无限循环,虽然不会阻塞主线程),因为主线程一般总是会有事件处理。 - ( void )runUntilDate:( NSDate *)limitDate; //同run方法,增加超时参数limitDate,避免进入无限循环。使用在UI线程(亦即主线程)上,可以达到暂停的效果。 - ( BOOL )runMode:( NSString *)mode beforeDate:( NSDate *)limitDate; //等待消息处理,好比在PC终端窗口上等待键盘输入。一旦有合适事件(mode相当于定义了事件的类型)被处理了,则立刻返回;类同run方法,如果没有事件处理也立刻返回;有否事件处理由返回布尔值判断

Spring Boot笔记—多线程系列(二)—自定义多线程

落爺英雄遲暮 提交于 2020-03-20 02:12:49
1 介绍 自定义线程池,有两种实现方式: 更改spring默认的线程池配置,全局生效 自定义新的线程池,指定作用范围 上一篇文章 《Spring Boot笔记-多线程系列(一)-使用多线程》 使用的就是spring默认的线程池。 2 实现 2.1 更改spring默认线程池配置 2.1.1 介绍 创建一个类,需要实现 AsyncConfigurer 即可。 2.1.2 样例 2.1.2.1 目录结构 ├── Study │ ├── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── top │ │ │ │ └── yxdz │ │ │ │ └── study │ │ │ │ └── spring │ │ │ │ └── springboot │ │ │ │ ├── thread │ │ │ │ │ └── service │ │ │ │ │ ├── ITestService.java │ │ │ │ │ └── impl │ │ │ │ │ └── TestSerivceImpl.java │ │ │ │ └── utils │ │ │ │ ├── SysThreadValueConfig.java │ │ │ │ └── config │ │ │ │ └── Thread │ │ │ │ └── SysThreadConfig.java │ │

IOS多线程(NSThread)

怎甘沉沦 提交于 2020-03-20 02:08:34
1.创建方法 使用NSThread创建线程主要有两个个方法,分别如下 NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil]; [myThread start]; [NSThread detachNewThreadSelector:@selector( doSomething: ) toTarget:self withObject:nil]; 这两种方式的区别在于: 前一种 方式尽管alloc了一个新Thread,但需要手动调用start方法来启动线程。这点与Java创建线程的方式相似。第二种方式,与上述做法1使用NSObject的类方法performSelectorInBackground:withObject:是一样的;第二种方式的可以在start真正创建线程之前对其进行设置,比如设置线程的优先级。第二 种调用就会立即创建一个线程并执行selector方法。 使用 NSThread创建线程时,要在执行的方法中自行管理内存,否则会有内存溢出警告。 - (void) doSomething:(id)sender { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSThread 多线程 三种方式

我的梦境 提交于 2020-03-20 02:05:01
// // ZBMainViewController.m // TestProject // // Created by 张先森 on 14/12/5. // Copyright (c) 2014年 zhibin. All rights reserved. // #import "ZBMainViewController.h" @interface ZBMainViewController () @property(nonatomic,strong)CALayer *mylayer; @end @implementation ZBMainViewController bool isopen=NO; - (void)viewDidLoad { [super viewDidLoad]; [self InitControls]; } -(void)InitControls{ NSThread *thread=[NSThread currentThread]; NSLog(@"%@",thread); NSThread *mainthread=[NSThread mainThread]; NSLog(@"%@",mainthread); NSThread *tempthread=[[NSThread alloc] initWithTarget:self selector:@selector