objective-c - 基础篇 - 数据库网络 -- 进程和线程--NSThread

来源:互联网 发布:提前多久淘宝买高铁票 编辑:程序博客网 时间:2024/06/17 11:58

一、进程和线程(可以参考自己项目:61天-数据库网络--多线程之NSThread)

1:一个应用程序就是一个进程,之后进程下面包括多个线程(至少一个线程)。

2:计算机是以线程为单位的。

3:线程是同步的。

4:假如我们的电脑是双核的,那么就可以同时运行两个线程,而其他的线程就需要等待CPU的分配。

5:通过时间片的切割,来切换线程。(时间片切割就是线程所需占用时间是多少,占用时间越多,说明抢占到的机会越大)

6:线程加锁----由于线程是同步的,所以有时候会出现不同线程同时运行一个事件的情况(例如买火车票事件中,窗口一、和窗口二就可能同时会在休眠的时候,同时卖第3张票),所以我们就需要对事件进行加锁(而且必须是同一把锁),从而避免上述情况。同时也需要在相应地方解锁

7:使用多线程的情况:

     (1):我们想使一个应用程序抢占过多的系统资源时就是用多线程技术,因为一个进程就是多个线程,线程越多抢占CPU就越多,比如说抢占CPU的时间。

     (2):一个应用程序中,有一个A线程需要一直运行或者运行时间很长,那么我们就要使用多线程,使这个A线程可以在后台运行,避免只有一个A线程而导致整个应用程序都停着等待A线程的结束。

     (3):做一件事情时,我们想让多个应用程序一起来做,比如我们要下载一个文件,不过这个文件特别大,那么我们就可以通过三个线程来分别下载该文件的一部分。

    (4):启动线程的方式有一种是:[selfperformSelectorInBackground:@selector(running:)withObject:nil]; 这个是不用使用到NSThread或是NSOperation或者GCD的。而是直接启动后台的一个线程。通过这种方式,我们可以在控制台看到running中的输出语句是另外的线程,

    (5): 控制台输出内容:2016-05-30 01:33:30.011 61-数据库网络--多线程之GCD[7005:198896] ,其中的7005是进程,198896是线程。我们可以通过这个来看不同的线程。


一、线程-NSThread

创建方式一:使用类的行为 

使用类的行为是自动启动线程的,而且由于本计算机是双核的,那么代表着两个线程其实是同时运行的,只是由于控制台输出的限制而已。

- (IBAction)threadLeiAction:(UIButton *)sender {

    // withObject指的是传值

    [NSThreaddetachNewThreadSelector:@selector(leiThread:)toTarget:selfwithObject:nil];

    while (true) {

        NSLog(@"这是我的类主线程");

    }   

}

-(void)leiThread:(id)sender{

    //死循环来显示线程信息

    while(1){

           NSLog(@"这是我的类线程");

    }

创建方式二:使用对象行为

使用对象的行为需要手动开启线程

- (IBAction)threadObjectAction:(UIButton *)sender {

    NSThread * thread = [[NSThreadalloc]initWithTarget:selfselector:@selector(objectThread:)object:nil];

    [thread setName:@"这是我的对象线程"];

    [thread start];

    while (true) {

        NSLog(@"这是我的对象主线程");

    }

}

-(void)objectThread:(id)sender{

    while (1) {

        [NSThreadsleepForTimeInterval:1];//该线程睡眠1

        NSLog(@"%@", [NSThreadcurrentThread].name);

    }

}


     

0 0
原创粉丝点击