首页 > 其他分享 >18:swift-并发

18:swift-并发

时间:2023-03-09 20:11:14浏览次数:39  
标签:异步 18 measurement label 并发 max print swift

 

 

正文

mport UIKit

class Complicate18VC: UIViewController {

    override func viewDidLoad()  {
        super.viewDidLoad()

        view.backgroundColor = .white
        self.title = "18:并发"
        
        
        // 2:任务是可以作为你程序一部分异步运行的工作单位。所有异步代码都会作为某任务的一部分运行。
        Task {
            await testAsynFunc()
            print("aaaa")
        }
        print("bbbbb")
        
        // 3:任务组    TaskGroup
        
        // 4: 行为体,线程安全
        Task {
            let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
            print(await logger.max)
        }
        
        /* 5:可发送类型 Sendable
         任务和行为体可以让你将程序拆分成能够安全并发执行的小部分。在一个任务或者行为体实例中,包含可变状态的那部分程序,比如变量和属性,就被叫做并发域。某些种类的数据不能在并发域之间共享,因为那些数据包含了可变状态,却又没有针对重叠访问进行防护。

         可以在并发域之间进行共享的类型,就是所谓的可发送类型。
         */
        
    }
    
    /*
     1:定义异步函数
        要标记对应函数或者方法是异步的,你在声明中形式参数的后面使用 async  关键字, 和你使用 throw  关键字一样。
        如果函数或者方法返回值,就把 async  写在返回箭头( -> )之前。比如说,这里是你可能写的在相册中获取照片名称方法:
     */
    
    // 异步函数
    func testAsynFunc() async {
        await Task.sleep(2 * 1_000_000_000)  // Two seconds
        print("异步函数")
    }
}


/* 4:**** 行为体 actor
    使用 actor 关键字引入行为体,跟着是它写在一对花括号中的定义。
    TemperatureLogger 行为体拥有其他行为体外代码可以访问的属性,并且限制了 max 属性只能是行为体内代码才能更新最大值。
 */
actor TemperatureLogger {
    let label: String
    var measurements: [Int]
    // 访问max
    private(set) var max: Int
 
    init(label: String, measurement: Int) {
        self.label = label
        self.measurements = [measurement]
        self.max = measurement
    }
}

 

标签:异步,18,measurement,label,并发,max,print,swift
From: https://www.cnblogs.com/zyzmlc/p/17201244.html

相关文章

  • BUU pwn PicoCTF_2018_shellcode //最简单的shellcode
    这道题需要我们了解x86汇编的lea指令。leadst,src指的是dst=&srcfile可知32bitELFIDAF5发现反编译失败,查看main函数的汇编,发现会调用vuln函数。其中leaeax,[ebp+va......
  • 开发Vue组件并发布到npm仓库
    因业务需求,部分功能组件需要在多个项目中使用,为了避免直接复制代码,所以开发组件之后发布到npm仓库步骤:1:考虑以后也可能需要开发组件,所以我这边新建一个vue项目2:开发组......
  • JDK 7 HashMap 并发情况下的死锁问题
    链表的头插法,了解一下这个博客目录问题描述详细解释问题描述JDK7的HashMap解决冲突用的是链表,在插入链表的时候用的是头插法,每次在链表的头部插入新元素。res......
  • 并发事务问题
    赃读:一个事务读到另外一个事务还没有提交的数据。  比如B读取到了A未提交的数据。2).不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读......
  • Linux高并发服务器之Linux多线程开发
    本文源自C++高薪面试项目的学习笔记,主要记录Liunx多线程的学习,主要知识点是线程概述等基础概念以外,还有线程相关Liunx系统函数以及对应练手代码,除此之外还有线程同步问题的......
  • (数据库系统概论|王珊)第十一章并发控制-第二、三、四节:封锁、封锁协议活锁和死锁
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解目录一:封锁(1)概念(2)类型(3)控制方式二:封锁协议(1)概念(2......
  • [转]C# 获得窗体句柄并发送消息(利用windows API可在不同进程中获取)
    编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口。首先,引入如下API接口:  [DllImport("user32.dll")]publicstaticexternIntP......
  • 高并发时发生的性能问题
    最近线上系统高并发时发生了两次性能问题,总结了一下共享给大家,避免日后再发生此类问题。1.现象:redis服务器cpu负荷很高,响应慢原因:代码中使用keys命令查询导致redis整体扫......
  • Ubuntu(18.04)虚拟机,挂起恢复后网络异常
    系统挂起后,重新恢复,查看网络,出现信息:ens33:<BROADCAST,MULTICAST>mtu1500qdiscfq_codelstateDOWNgroupdefaultqlen1000如下: 解决方法:输入指令:sudodhcl......
  • 剑指 Offer 18.删除链表节点
    题目表述   解法双指针法classSolution{public:ListNode*deleteNode(ListNode*head,intval){ListNode*a=head->next;......