多线程

C#多线程学习

自闭症网瘾萝莉.ら 提交于 2020-04-03 08:16:19
任何程序在执行时,至少有一个主线程。在.net framework class library中,所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。如果你想在你的应用程序中使用多线程,就必须包含这个类。 Thread类有几个至关重要的方法,描述如下: Start():启动线程; Sleep(int):静态方法,暂停当前线程指定的毫秒数; Abort():通常使用该方法来终止一个线程; Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; Resume():恢复被Suspend()方法挂起的线程的执行。 一个直观印象的线程示例: using System;using System.Threading; namespace ThreadTest{  class RunIt  {    [STAThread]    static void Main(string[] args)    {      Thread.CurrentThread.Name="System Thread";//给当前线程起名为"System Thread" Console.WriteLine(Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread.ThreadState);     

iOS多线程的初步研究(九)-- dispatch源

时光怂恿深爱的人放手 提交于 2020-04-03 05:32:47
dispatch源( dispatch source )和RunLoop源概念上有些类似的地方,而且使用起来更简单。要很好地理解dispatch源,其实把它看成一种特别的生产消费模式。dispatch源好比生产的数据,当有新数据时,会自动在dispatch指定的队列(即消费队列)上运行相应地block,生产和消费同步是dispatch源会自动管理的。 dispatch源的使用基本为以下步骤: 1. dispatch_source_t source = dispatch_source_create ( dispatch_source_type , handler , mask , dispatch_queue ); //创建dispatch源,这里使用加法来合并dispatch源数据,最后一个参数是指定dispatch队列 2. dispatch_source_set_event_handler (source, ^{ //设置响应dispatch源事件的block,在dispatch源指定的队列上运行   //可以通过 dispatch_source_get_data (source)来得到dispatch源数据 }); 3. dispatch_resume (source); //dispatch源创建后处于suspend状态,所以需要启动dispatch源 4.

iOS多线程系统整理 swift

倖福魔咒の 提交于 2020-04-03 05:26:25
多线程 是一个应用程序内多个代码的执行路径,执行线程,同时在同一时间里执行不同的任务。 三种: 1、NSTread 2、Cocoa NSOperation (NSOperation,NSOperationQueue) 3、GrandCentralDispatch:GCD 1\NSTread 相对最简单,需要自己管理线程的生命周期和线程同步(加锁会有一定的系统开销) 两种应用方式: 需要传递三个参数: selector:线程执行方法"" target:方法所在的对象 argument:传递给方法的参数,可选nil 一、直接创建线程,自动运行线程 // Class Method class func detachNewThreadSelector(selector:Selector,toTarget target:AnyObject,withObject argument:AnyObject?) 二、先创建一个线程对象,手动运行线程,在运行之前可设置线程优先级等信息。 convenience init(target:AnyObject,selector:Selector,object argument:AnyObject?) for example // download image method func downloadImage() { var imageUrl = "https

iOS多线程——GCD篇

左心房为你撑大大i 提交于 2020-04-03 05:25:54
什么是GCD GCD是苹果对多线程编程做的一套新的抽象基于C语言层的API,结合Block简化了多线程的操作,使得我们对线程操作能够更加的安全高效。 在GCD出现之前Cocoa框架提供了NSObject类的 performSelectorInBackground:withObject performSelectorOnMainThread 方法来简化多线程编程技术。 GCD可以解决以下多线程编程中经常出现的问题: 1.数据竞争(比如同时更新一个内存地址) 2.死锁(互相等待) 3.太多线程导致消耗大量内存 在iOS中,如果把需要消耗大量时间的操作放在主线程上面,会妨碍主线程中被称为RunLoop的主循环的执行,从而导致不能更新用户界面、应用程序的画面长时间停滞等问题。 Dispatch Queue Dispatch Queue是GCD中对于任务的抽象队列(FIFO)执行处理。 queue分为两种, SERIAL_DISPATCH_QUEUE           等待现在执行中处理结束 CONCURRENT_DISPATCH_QUEUE       不等待现在执行中处理结束 换句话说也就是 SERIAL_DISPATCH_QUEUE 是串行,CONCURRENT_DISPATCH_QUEUE是并行。 具体到线程上,就是SERIAL_DISPATCH

iOS多线程GCD

懵懂的女人 提交于 2020-04-03 05:22:56
GCD是和block紧密相连的,所以最好先了解下block。GCD是C level的函数,这意味着它也提供了C的函数指针作为参数。 下面首先来看GCD的使用: dispatch_async(dispatch_queue_t queue, dispatch_block_t block); async表明异步运行,除了async,还有sync(同步),delay(延时) block代表的是你要做的事情, queue则是你把任务交给谁来处理了. dispatch_async 这个函数是异步的,这就意味着它会立即返回而不管block是否运行结束。因此,我们可以在block里运行各种耗时的操作(如网络请求) 而同时不会阻塞UI线程。 之所以程序中会用到多线程是因为程序往往会需要读取数据,然后更新UI。为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程。 GCD里就有三种queue来处理. 1. Main queue:   顾名思义,运行在主线程,由dispatch_get_main_queue获得。和UI相关的就要使用Main Queue. main dispatch queue 是一个全局可用的串行队列,其在行用程序的主线程上执行任务。此队列的任务和应用程序的主循环(run loop)要执行的事件源交替执行。因为其运行在应用程序的主线程,main

多线程设计模式——Read-Write Lock模式和Future模式分析

橙三吉。 提交于 2020-04-02 22:49:45
目录 多线程程序评价标准 任何模式都有一个相同的“中心思想” Read-Write Lock 模式 RW-Lock模式特点 冲突总结 手搓RW Lock模式代码 类图 Data类 P.S. Before/After模式 ReadWriteLock类 正确运行结果 适用场合 “逻辑锁”vs“物理锁” 性能对比 “中心思想”分析 Future 模式 Future模式特点 手搓Future模式代码 类图 Main类 Host类 FutureData类 RealData类 运行结果 模式分析 与生产者-消费者模式有区别吗? 模式拓展 模式思考 Future模式“中心思想” 伟大的Concurrent包! RW Lock模式 Future模式 示例程序代码 本文内所有实现的代码均附在文末,有需要可以参考。 (好奇宝宝们可以粘贴下来跑一下 多线程程序评价标准 安全性: ​ 安全性就是不损坏对象。也就是保证对象内部的字段的值与预期相同。 生存性: ​ 生存性是指无论什么时候,必要的处理都一定能够执行。失去生存性最典型的例子就是“死锁”。 可复用性: ​ 指类能够重复利用。若类能够作为组件从正常运行的软件里分割出来,说明这个类有很高的复用性。 性能: ​ 指能够快速、大批量地执行处理。主要影响因素有:吞吐量、响应性、容量等。 这里还要再区分一下这四条。 前两条 是程序 正常运行 的必要条件;

多线程学习笔记

…衆ロ難τιáo~ 提交于 2020-04-02 21:42:51
一、多线程简介    我们所说的 Windows是一个多任务操作系统,是说Windows能同时执行多个程序。当我们每运行一个程序的时候其实就开启了一个进程,进程中包含了这个程序运行所需要的文本代码、变量和动态分配的内存、堆栈等资源,进程之间先对独立,一个进程不会干扰另一个进程的运行。在.net中进程可以包含多个应用程序域和线程,应用程序域是一个逻辑区域(不做详细介绍)。线程是进程中的基本执行单元,线程可以帮一个进程同时做多件事,线程主要由线程ID,当前指令指针(PC),寄存器集合和堆栈组成,同一进程的多个线程可以在宏观上并发的执行,但在微观上CPU同时只能执行一个线程,所以线程也就有了就绪,阻塞,运行三种状态,具体CPU执行那个线程这由 系统 根据线程的优先级决定。程序入口的线程叫主线程,在.net中就是Main()方法作为入口的,调用Main()方法系统就会创建一个主线程。   所谓多线程就是在一个进程内运行多个线程来协同完成工作,这样能在一定程度上提高程序的性能,最明显的就是在做winform开发的时候,如果不用多线程,当我们处理数据的时候程序界面是卡死的,这就是因为在只有一个线程的时候,处理数据的和UI是在一个线程(主线程)中,但处理数据的时候这个线程是不会去处理前台UI的,所以我们会感觉程序卡死了。多线程的缺点就是CPU要花时间来处理要执行那个线程..... 二、

系统问题需要下载

蓝咒 提交于 2020-04-02 20:24:40
并发的优点在操作系统单核的时候就体现了,最好的体现就是操作系统中线程的调度。而我们能做哪种并发,取决于操作系统能做哪种并发,没有人会以为自己写的程序真的能创建线程。 下面是个人的一些使用过得并发路子,由于接触有限只是用下面4种。 正文 1.多线程 采用多个线程来执行程序。在此指狭隘的多线程概念,比如说一个程序,执行不同类型的任务采用不同的线程,这些线程一直伴随着程序的生命周期。 2.并行处理 是多线程中的一种。把正在执行的大量任务分割成小块,分配给多个同时运行的程序。 下面是百度百科的概念: 并行处理(Parallel Processing)是计算机系统中能同时执行两个或多个处理的一种计算方法。并行处理可同时工作于同一程序的不同方面。并行处理的主要目的是节省大型和复杂问题的解决时间。 为使用并行处理,首先需要对程序进行并行化处理,也就是说将工作各部分分配到不同处理进程(线程)中。并行处理由于存在相互关联的问题,因此不能自动实现。另外,并行也不能保证加速。从理论上讲,在 n 个并行处理的执行速度可能会是在单一处理机上执行的速度的 n 倍。 狭隘的多线程解决不同类型的任何互不干预。而并行处理则是从任务的角度分割,切换成小而完整的任务,利用多线程去实行并行处理。 之所以会有这种模式,是因为我们会有大的任务,这会影响其他任务的执行,不可能把苹果都放在一个篮子里面。 3.异步编程

C++多线程:std::unique_lock

与世无争的帅哥 提交于 2020-04-02 20:24:25
Member functions (constructor) Construct unique_lock (public member function ) (destructor) Destroy unique_lock (public member function ) Locking/unlocking lock Lock mutex (public member function ) try_lock Lock mutex if not locked (public member function ) try_lock_for Try to lock mutex during time span (public member function ) try_lock_until Try to lock mutex until time point (public member function ) unlock Unlock mutex (public member function ) Modifiers operator= Move-assign unique_lock (public member function ) swap Swap unique locks (public member function ) release Release mutex

解除网站页面下载受限的思路和工具

心已入冬 提交于 2020-04-02 18:46:04
偶尔我们的网络会被限制,例如看不了视频,不可以下载应用等,这中情况一般是使用局域网(LAN)时会发生的情况,针对这类情况,如何解除呢? 下载被限制了,如何解除?要解除限制需要从代理服务器和下载客户端两方面入手。因为FTP网站限制指定的IP地址段内电脑才可以浏览,因此先要拥有访问权限,而使用代理服务器充当跳板在我看来是比较容易且可行的处理方式。针对这些限制同时使用多线程下载的FTP网站,就能使用代理加多线程下载软件的方式来攻克。 针对IP限制,我们能够用兔子动态ip,软件简单易用,高级模式下,用户可以独享固定带宽资源,光速网络体验,流畅稳定使用等,这里就不多说了。 获取代理服务器后,就能够直接在下载软件中设置特定的代理,之后就能够登入访问受限网站。不过针对限制同时使用多线程下载的FTP网站,要实现消除限制,除了要获取若干个能用的socks的代理服务器外,还必须对下载软件做好一些设置。 目前最常见的莫过于flashget和Net Transport,我们来看一下它们的设置: 1.FlashGet 逐个打开FlashGet菜单中“工具” | “选项” | “代理服务器”,把能够使用的socks的代理服务器添加到列表窗口并勾选对应的“多代理”方框。必须留意的是,插入socks代理服务器时要注意选择类型(sock5还是sock4,通常情况下目前能找到多为sock5代理)和端口。