ObjectC的GCD(Grand Central Dispatch)机制小析

声明
本文为Gleasy原创文章,转载请指明引自Gleasy团队博客

GCD机制 vs JAVA线程池
1. GCD执行起来比JAVA真心方便
ObjectC GCD:可执行的为代码片段(code block)

dispatch_async(queue,^{
 NSLOG(@"hello,word");
});

 

JAVA: 必须是对象(可以用无名类)

pool.submit(new Runnable(){
 public best online casino  void run(){
 System.out.println("hello,world");
 }
});

 

2.GCD不用关心线程的建立和释放
GCD机制更为傻瓜式,不用关心线程何时建议,何时释放,只管用,建立和释放的问题交给运行环境解决。
JAVA得自己建立不同的线程池,还得关心最大线程数,须手工关闭线程池(否则会出现最大线程数超的问题)。

3.GCD的线程机制更为高效
GCD机制线程可以说与生俱来,与程序员打交道操作是一个个的queue,线程是躲在queue后面,执行queue里面的代码片段的,而且当线程不够用时,系统会自己调度,创新新的线程,而所有这一切,程序员都是不知道的。线程创建和销毁可以全局调度,减少无谓开销。
JAVA的多线程机制,线程池大概相当于GCD的queue,不同的是,每个线程池的线程都是独立的,相互之间不能互相挪用。这就要求程序员去规划每个池的线程规模及建立和销毁策略,当系统规模稍大时,在同一个JVM中,可能存在大量线程池,A线程池忙碌时,B线程池可能极为空闲,但A线程池由于无法挪用B线程池的线程,从而导致线程创建和销毁频率大大上升。

4.结论
无论从性能,简洁性,易用性方面,GCD机制都比JAVA的多线程机制要好;希望JAVA虚拟机可以在某个版本引入GCD特性。

此条目发表在 IOS, Java技术 分类目录。将固定链接加入收藏夹。

发表评论