swift3.0+GCD小小的尝试

原创 2016年08月29日 19:32:29
  1. 线程同步+串行队列
        let queue = DispatchQueue.init(label: "myQueue")
        queue.sync {

            print("-----1  begin \(Thread.current)")

            print("-----1  end \(Thread.current)")
        }
        print("++++++5 \(Thread.current)")
        queue.sync {
            print("-----2  begin \(Thread.current)")

            print("-----2  end \(Thread.current)")
        }
        print("++++++6 \(Thread.current)")
        queue.sync {
            print("-----3  begin \(Thread.current)")

            print("-----3  end \(Thread.current)")
        }
        print("++++++7 \(Thread.current)")
        queue.sync {
            print("-----4  begin \(Thread.current)")

            print("-----4  end \(Thread.current)")
        }
        print("++++++8 \(Thread.current)")

执行结果

-----1  begin <NSThread: 0x60000007d580>{number = 1, name = main}
-----1  end <NSThread: 0x60000007d580>{number = 1, name = main}
++++++5 <NSThread: 0x60000007d580>{number = 1, name = main}
-----2  begin <NSThread: 0x60000007d580>{number = 1, name = main}
-----2  end <NSThread: 0x60000007d580>{number = 1, name = main}
++++++6 <NSThread: 0x60000007d580>{number = 1, name = main}
-----3  begin <NSThread: 0x60000007d580>{number = 1, name = main}
-----3  end <NSThread: 0x60000007d580>{number = 1, name = main}
++++++7 <NSThread: 0x60000007d580>{number = 1, name = main}
-----4  begin <NSThread: 0x60000007d580>{number = 1, name = main}
-----4  end <NSThread: 0x60000007d580>{number = 1, name = main}
++++++8 <NSThread: 0x60000007d580>{number = 1, name = main}
++++++8

和不调用线程直接在代码块中写效果相同, 在主线程中执行,不新建线程
2. 线程同步+并行队列

        let queue = DispatchQueue.init(label: "my_queue", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, target: nil)
        queue.sync {

            print("-----1  begin \(Thread.current)")

            print("-----1  end \(Thread.current)")
        }
        print("++++++5 \(Thread.current)")
        queue.sync {
            print("-----2  begin \(Thread.current)")

            print("-----2  end \(Thread.current)")
        }
        print("++++++6 \(Thread.current)")
        queue.sync {
            print("-----3  begin \(Thread.current)")

            print("-----3  end \(Thread.current)")
        }
        print("++++++7 \(Thread.current)")
        queue.sync {
            print("-----4  begin \(Thread.current)")

            print("-----4  end \(Thread.current)")
        }
        print("++++++8 \(Thread.current)")
-----1  begin <NSThread: 0x6100000770c0>{number = 1, name = main}
-----1  end <NSThread: 0x6100000770c0>{number = 1, name = main}
++++++5 <NSThread: 0x6100000770c0>{number = 1, name = main}
-----2  begin <NSThread: 0x6100000770c0>{number = 1, name = main}
-----2  end <NSThread: 0x6100000770c0>{number = 1, name = main}
++++++6 <NSThread: 0x6100000770c0>{number = 1, name = main}
-----3  begin <NSThread: 0x6100000770c0>{number = 1, name = main}
-----3  end <NSThread: 0x6100000770c0>{number = 1, name = main}
++++++7 <NSThread: 0x6100000770c0>{number = 1, name = main}
-----4  begin <NSThread: 0x6100000770c0>{number = 1, name = main}
-----4  end <NSThread: 0x6100000770c0>{number = 1, name = main}
++++++8 <NSThread: 0x6100000770c0>{number = 1, name = main}

队列中的函数还是顺序执行,不会新建线程
3. 线程异步+串行队列

        let queue = DispatchQueue.init(label: "myQueue")
        queue.async {

            print("-----1  begin \(Thread.current)")

            print("-----1  end \(Thread.current)")
        }
        print("++++++5 \(Thread.current)")
        queue.async {
            print("-----2  begin \(Thread.current)")

            print("-----2  end \(Thread.current)")
        }
        print("++++++6 \(Thread.current)")
        queue.async {
            print("-----3  begin \(Thread.current)")

            print("-----3  end \(Thread.current)")
        }
        print("++++++7 \(Thread.current)")
        queue.async {
            print("-----4  begin \(Thread.current)")

            print("-----4  end \(Thread.current)")
        }
        print("++++++8 \(Thread.current)")
++++++5 <NSThread: 0x618000073c40>{number = 1, name = main}
-----1  begin <NSThread: 0x60000007c4c0>{number = 3, name = (null)}
-----1  end <NSThread: 0x60000007c4c0>{number = 3, name = (null)}
++++++6 <NSThread: 0x618000073c40>{number = 1, name = main}
-----2  begin <NSThread: 0x60000007c4c0>{number = 3, name = (null)}
-----2  end <NSThread: 0x60000007c4c0>{number = 3, name = (null)}
++++++7 <NSThread: 0x618000073c40>{number = 1, name = main}
-----3  begin <NSThread: 0x60000007c4c0>{number = 3, name = (null)}
++++++8 <NSThread: 0x618000073c40>{number = 1, name = main}
-----3  end <NSThread: 0x60000007c4c0>{number = 3, name = (null)}
-----4  begin <NSThread: 0x60000007c4c0>{number = 3, name = (null)}
-----4  end <NSThread: 0x60000007c4c0>{number = 3, name = (null)}

队列中的人物顺序执行,但是会新建线程和主线程异步执行
4. 线程异步+并行队列

        let queue = DispatchQueue.init(label: "my_queue", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, target: nil)
        queue.async {

            print("-----1  begin \(Thread.current)")

            print("-----1  end \(Thread.current)")
        }
        print("++++++5 \(Thread.current)")
        queue.async {
            print("-----2  begin \(Thread.current)")

            print("-----2  end \(Thread.current)")
        }
        print("++++++6 \(Thread.current)")
        queue.async {
            print("-----3  begin \(Thread.current)")

            print("-----3  end \(Thread.current)")
        }
        print("++++++7 \(Thread.current)")
        queue.async {
            print("-----4  begin \(Thread.current)")

            print("-----4  end \(Thread.current)")
        }
        print("++++++8 \(Thread.current)")
-----1  begin <NSThread: 0x60000006c2c0>{number = 3, name = (null)}
++++++5 <NSThread: 0x600000067e80>{number = 1, name = main}
-----1  end <NSThread: 0x60000006c2c0>{number = 3, name = (null)}
-----2  begin <NSThread: 0x60000006c2c0>{number = 3, name = (null)}
-----2  end <NSThread: 0x60000006c2c0>{number = 3, name = (null)}
++++++6 <NSThread: 0x600000067e80>{number = 1, name = main}
++++++7 <NSThread: 0x600000067e80>{number = 1, name = main}
++++++8 <NSThread: 0x600000067e80>{number = 1, name = main}
-----3  begin <NSThread: 0x60000006c2c0>{number = 3, name = (null)}
-----4  begin <NSThread: 0x60000006cb40>{number = 4, name = (null)}
-----3  end <NSThread: 0x60000006c2c0>{number = 3, name = (null)}
-----4  end <NSThread: 0x60000006cb40>{number = 4, name = (null)}

会新建多条线程,任务会异步的开始执行

字符驱动第一步----小小的尝试

想写一个功能较完整的字符驱动程序, 但发现还有许多要考虑。 这里记录下 自己对字符驱动的初步尝试 在没有操作系统的情况下,要让系统响应键盘,需要做以下方面工作: 1. 键盘中断程序的编写:用户按下...
  • max_godlike
  • max_godlike
  • 2013年04月05日 15:52
  • 438

一次小小的模板尝试

近日,项目中追加了一个需求,打印log。 要求:在函数的异常退出处打印一些有用的参数。如函数的传入参数,异常返回值等等。一次最多可以打印5个参数。当参数多余两个的时候打印两行 如图,输出参...
  • lsnl8480
  • lsnl8480
  • 2013年04月22日 09:54
  • 499

小小的html的尝试,不太好

一个页面内超链接的小尝试,不太成功。具体还会再有修改                         一个小小的尝试             .left-lif...
  • qq_37834467
  • qq_37834467
  • 2017年05月22日 20:17
  • 82

第一次小小的尝试——舵机控制

去年第二届机器人擂台赛不知怎么地打了酱油,看到生命童鞋基本上是独立做出了遥控小车——以手机为上位机,通过蓝牙进行串口数据传送,搭建直流稳压模块和以lm298n作为驱动模块(老实说,这些东西我是在这次才...
  • hemixianyuan
  • hemixianyuan
  • 2013年11月20日 13:40
  • 1039

小小的IP,大大的耦合

转自:https://mp.weixin.qq.com/s/-kOYRHKPAKwjGS4jhSh-pA     架构师之路 什么是耦合? 耦合,是架构中,本来不相干的代码、模块、...
  • admin1973
  • admin1973
  • 2017年12月07日 11:49
  • 84

一次小小的 Excel 的 VBA 尝试

    最近学校要评奖学金,所以系里面的学生工作办公室就去校教务处拿了全部学生的上学期成绩回来。学校要求是没有挂科的同学才有资格评奖学金,所以我就打算把拿回来的这些学生成绩导入 Access 里面,然...
  • kowity
  • kowity
  • 2006年10月21日 15:39
  • 806

一个小小的工具:获取当前手机的联网方式。

原文:http://www.cnblogs.com/meteoric_cry/p/4627075.html 一个小小的工具:获取当前手机的联网方式。好像原作者还处理了一些比较蛋疼的情况。 pack...
  • AIR_GRU
  • AIR_GRU
  • 2017年06月13日 16:24
  • 128

请参加一个小小的问卷调查

最近在做一个关于企业人员对于学习管理知识的需求的调查,各位可以参加一下,地址为:http://www.zhijizhibi.com/op_FgQuestionnairePreview!question...
  • jabmoon
  • jabmoon
  • 2008年11月12日 15:22
  • 276

北京航空航天大学online judge:2014第一次练习*L题

 L题:回文数问题   题目描述 小小的大只没做中秋节热身赛,这两天看到那道回文数的题目颇为有趣。她决定进行修改。 输入格式: 题目有多组数据 每行两个数a,...
  • yujifan0326
  • yujifan0326
  • 2014年10月23日 15:55
  • 1410

对快排的一些小小的认识

说到快速排序首先要说到最早接触到的冒泡排序。对于冒泡排序,最大的特点就是通过比对两个数字的大小如果两个数字的大小顺序与想要得到的顺序结果不相同时,则进行顺序交换。如图 而对于快排则是从左右两端同时开始...
  • xiaozhu_gao
  • xiaozhu_gao
  • 2018年01月14日 20:05
  • 85
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:swift3.0+GCD小小的尝试
举报原因:
原因补充:

(最多只允许输入30个字)