OC多线程分享pthread&NSThread

一.多线程基础{

1. 耗时操作:I/O操作:讲数据从内存输入或者输出到外部设备
2. 多线程优,缺点:
优点:{1.能'适当'提高程序的执行效率
      2.能'适当'提高CPU和内存的利用率
      3.线程上的任务完成后,线程会自动销毁,节省内存}
缺点:{1.开启线程需要占用一定的内存空间,如果开启过多线程,就会大量占用CPU资源,降低程序性能
    2.内存占用:子线程512KB,主线程ISO8前1M,后512KB
    3.线程开启越多,CPU调度相差的开销就越大{时间开销/空间开销}
    4.程序设计更加复杂:比如线程间的通信,线程间的数据共享;}

二.pthread{

1.基于C语言的;
2.跨平台可移植;
3.线程生命周期程序员控制;
4.引入头文件:#import <pthread.h>
5.创建方法:pthread_create{
    a.参数1:直线线程标识符的指针:'定义'pthread_t pthread = '使用'&pthread
    b.参数2:线程属性;
    c.参数3:指向新线程的指针(一个方法,或者说需要新线程去执行的地方);
    d.参数4:线程参数;
    e.返回值:BOOL,0表示创建线程成功,反之失败(成功只有一种,失败情况很多种)}
6.桥接:__bridge将OC语言的属性转化为C语言的属性,告诉编译器,这是个C语言属性,不需要内存管理,你啥都不做就行了;}

三.NSThread{

1.基于OC语言,面向对象;
2.可直接操作线程对象;
3.程序呀管理线程生命周期;
4.三种创建方法{
    a.对象创建方法:"可以获得对象,对对象进行操作,需手动启动"
        NSThread *thread = [[NSThread alloc] initWithTarget:self @selector(demo:) object:@"参数"];
        '需手动启动':[thread start];
    b.类的创建方法:"无法获取线程对象,自动开启线程"'detach分离'
        [NSThread detachNewThreadSelector:@selector(demo:) toTarget:self withObject:@"参数"];
    c.NSObject的分类创建:"无法获取对象,任何NSObject对象都可以创建,自动开启线程"
    [self perfromSelectorInBackground:@selector(demo:) withObject:@"参数"];}
5.线程的生命周期:{
    a.新建:创建线程对象:[[NSThread alloc] initWithTarget];
    b.就绪:将线程放入'可调动释放池',等待CPU调用:[NSThread start];
    c.运行:CPU调度'可调动释放池'中'就绪状态'的线程,线程结束之前,状态会在就绪和运行间来回切换(CPU调度特点,CPU完成,程序员无法干涉);
    d.阻塞:{
        1.休眠指定时间:[NSThread sleepForTimeInterval:1.0];
        2.休眠到指定日期:[NSThread sleepUntilDate:[NSDate dateWith]];
        3.互斥锁:@synchronized'只能有一个线程访问这个属性,其他线程会阻塞等待访问结束'}
    e.死亡:正常死亡:线程执行结束 非正常死亡:程序崩溃/满足某个条件后,线程内部强制退出,调用"exit"("主线程中严禁调用exit")
    f.重要注意:{
        1."主线程中严禁调用exit"
        2."[NSThread exit]方法会停止当前线程"
        3."在调用[NSThread exit]方法前,一定要释放之前C语言框架创建的对象"
        "CGMutablePathRef path = CGPathCreateMutable()"
        "CGPathRelease(path);"}}
6.线程属性:{
    1.name:线程名称,用来定义BUG位置
    2.threadPriority:线程优先级,浮点数0~1,1最高,默认0.5,只CPU决定调用频率,最好不要修改;
    3stackSize:栈区大小:默认512KB,最新哦啊16KB,必须是4KB的整数打印时候/1024;}
7.线程安全:{
    1.互斥锁/同步锁:{'单写&单读'
        a.可以保证被锁定的代码,同一时间,只能有一个线程可以操作;
        b.任何NSObject的对象,都是可以所对象,你饿不都有一把锁,big切默认是开着的;
        c.锁对象:一定要全局锁对象,保证所有的线程都能访问(self是最方便的所对象)
        d.互斥锁的范文应该尽量小,但一定要锁住资源的'读写'部分
        e.加锁后程序效率比不加锁要"低",因为线程要等待解锁,牺牲了性能保证安全性;}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • IOS多线程实现方案一 (pthread、NSThread) 在iOS开发中,多线程是我们在开发中经常使用的一门技...
    3099d00a659e阅读 3,661评论 1 51
  • .一.进程 进程:是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空...
    IIronMan阅读 4,540评论 1 33
  • 一、多线程概述 1、进程,线程 进程:进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行...
    一叶清帆阅读 291评论 0 1
  • A我今天学到了什么 垂直水平居中的3种方法 1.用transform垂直水平居中 2.用position水平居中 ...
    孔子曰_f425阅读 309评论 1 0
  • 章节目录 第二十四章:比武(二) 接下来各门各派陆续有人上台比试,有的头阵就败了下来,有的则连胜几场,还有的被拳脚...
    南语上阅读 366评论 2 10