前言
EPOLL是LINUX独有的I/O复用函数。其将用户关心的文件描述符(fd)上的事件放在内核里的一个事件表中。Select和Poll会在每次调用的时候线性扫描全部的Socket集合,而Epoll是通过向内核去注册回调事件的方式,只有活跃的socket才会主动的调用callback函数,如果不是所有socket都活跃的情况下,效率相较于select/poll有很大的提升。
节选自《节选》
Michael大佬的视频是我看见的最好的Unity入门教程,附上视频地址:
Unity教程:利用对象池设计制作Dash冲锋残影效果!https://www.bilibili.com/video/av83771678
对象池模式管理一个可代替对象的集合。组件从池中借出对象,用它来完成一些任务并当任务完成时归还该对象。被归还的对象接着满足请求,不管是同一个组件还是其他组件的请求。对象池模式可以管理那些代表的现实资源或者通过重用来分摊昂贵初始化代价的对象。
第二步操作就是借出。
第三步操作是组件用借出的对象来完成一些任务。这时候并不需要对象池再做什么,但是这也意味着该对象将被租借一段时间并且不能在被其他组件借出。
第四步操作就是归还,组件归还借出的对象这样可以继续满足其他的租借请求。
在一个多线程的应用中,第二,第三,第四步操作都有可能发生并发操作。多线程的组件中分享对象导致了潜在的并发问题。也存在一种情况就是当所有对象都被借出时不能满足接下来的请求,对象池必须应对这些请求,不管是告诉组件已经没有对象可借还是允许组件等待直到有归还的对象。
-百度百科
对象池通过预先设定一组可以自定义的对象,当使用时将其从池中取出,此时判断取出的条件是否满足,如池子中是否有空闲的item,当池子空的时候的解决方案等。用完后归还给池中等待下一次取出,其优点就是能复用池中已经预先放好的对象,不会有分配内存和释放内存的开销。
但其缺点也很明显,在并发环境下若多线程同时获取可能会产生同步问题或锁竞争(为了防止多个线程同时使用一个程序而造成的并发问题,将方法进行synchronized标识,表示只有其中一个线程能拿到锁执行该程序,而其他的线程需要等待且不断尝试获取锁,直到拿到锁执行程序为止,即多个线程进行锁的竞争)而造成巨大开销。
工程基于Unity learn的教程Ruby’s Adventure: 2D Beginner
https://learn.unity.com/project/ruby-s-2d-rpg?language=en
文章用于自己对学习内容进行梳理
工程基于Unity learn的教程John Lemon’s Haunted Jaunt: 3D Beginner
https://learn.unity.com/project/john-lemon-s-haunted-jaunt-3d-beginner?language=en
文章用于自己对学习内容进行梳理
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
| 区别点 | 重载方法 | 重写方法 |
|---|---|---|
| 参数列表 | 必须修改 | 一定不能修改 |
| 返回类型 | 可以修改 | 一定不能修改 |
| 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
| 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |