美文网首页iOS OC 学习手册
OC多线程分享pthread&NSThread

OC多线程分享pthread&NSThread

作者: ZealPenK | 来源:发表于2016-07-26 21:13 被阅读0次

    一.多线程基础{

    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.加锁后程序效率比不加锁要"低",因为线程要等待解锁,牺牲了性能保证安全性;}

    相关文章

      网友评论

        本文标题:OC多线程分享pthread&NSThread

        本文链接:https://www.haomeiwen.com/subject/fitojttx.html