岛

节选自《节选》


  • 首页

  • 标签9

  • 归档14

EPOLL中的ET,LT及IO阻塞

发表于 2021-02-01 | 评论数:

前言

EPOLL是LINUX独有的I/O复用函数。其将用户关心的文件描述符(fd)上的事件放在内核里的一个事件表中。Select和Poll会在每次调用的时候线性扫描全部的Socket集合,而Epoll是通过向内核去注册回调事件的方式,只有活跃的socket才会主动的调用callback函数,如果不是所有socket都活跃的情况下,效率相较于select/poll有很大的提升。

阅读全文 »

C#中的值类型和引用类型

发表于 2020-08-17 | 评论数:

在学习Unity脚本开发的时候接触到了引用类型和值类型,记录一下自己的理解

栈和堆

首先在项目内存分配中会使用到线程栈和堆,先对栈进行分析,当我们执行方法时,会将方法压栈,执行完毕后弹出,所占内存清空。栈有下面这些特性:

  1. 栈是内存自我管理的结构,压栈时自动分配内存,出栈时自动清空
  2. 栈中的内存不能动态请求,只能为大小确定的数据分配内存,灵活性不高,但栈的执行效率很高

  3. 栈的可用空间不大

阅读全文 »

使用C#和Unity实现的多人聊天室2

发表于 2020-08-05 | 更新于 2020-08-06 | 评论数:

GIF 2020-8-5 16-16-52

阅读全文 »

使用C#和Unity实现的多人聊天室(1)

发表于 2020-08-04 | 更新于 2020-08-07 | 评论数:

GIF 2020-8-4 16-19-32

阅读全文 »

《云之谷》

发表于 2020-08-02 | 更新于 2020-08-03 | 评论数:

image-20200802231112218

开一篇博客,记录云之谷的历史,惊喜的发现一些上古记录还留存在互联网上

阅读全文 »

利用对象池实现角色的残影

发表于 2020-01-23 | 评论数:

来源

Michael大佬的视频是我看见的最好的Unity入门教程,附上视频地址:

Unity教程:利用对象池设计制作Dash冲锋残影效果!https://www.bilibili.com/video/av83771678

对象池

对象池模式管理一个可代替对象的集合。组件从池中借出对象,用它来完成一些任务并当任务完成时归还该对象。被归还的对象接着满足请求,不管是同一个组件还是其他组件的请求。对象池模式可以管理那些代表的现实资源或者通过重用来分摊昂贵初始化代价的对象。

第二步操作就是借出。

第三步操作是组件用借出的对象来完成一些任务。这时候并不需要对象池再做什么,但是这也意味着该对象将被租借一段时间并且不能在被其他组件借出。

第四步操作就是归还,组件归还借出的对象这样可以继续满足其他的租借请求。

在一个多线程的应用中,第二,第三,第四步操作都有可能发生并发操作。多线程的组件中分享对象导致了潜在的并发问题。也存在一种情况就是当所有对象都被借出时不能满足接下来的请求,对象池必须应对这些请求,不管是告诉组件已经没有对象可借还是允许组件等待直到有归还的对象。

image-20200123220938163

-百度百科

对象池通过预先设定一组可以自定义的对象,当使用时将其从池中取出,此时判断取出的条件是否满足,如池子中是否有空闲的item,当池子空的时候的解决方案等。用完后归还给池中等待下一次取出,其优点就是能复用池中已经预先放好的对象,不会有分配内存和释放内存的开销。

但其缺点也很明显,在并发环境下若多线程同时获取可能会产生同步问题或锁竞争(为了防止多个线程同时使用一个程序而造成的并发问题,将方法进行synchronized标识,表示只有其中一个线程能拿到锁执行该程序,而其他的线程需要等待且不断尝试获取锁,直到拿到锁执行程序为止,即多个线程进行锁的竞争)而造成巨大开销。

阅读全文 »

Unity学习(2)

发表于 2020-01-23 | 评论数:

工程基于Unity learn的教程Ruby’s Adventure: 2D Beginner

https://learn.unity.com/project/ruby-s-2d-rpg?language=en

文章用于自己对学习内容进行梳理

阅读全文 »

Unity学习(1)

发表于 2020-01-13 | 更新于 2020-01-23 | 评论数:

工程基于Unity learn的教程John Lemon’s Haunted Jaunt: 3D Beginner

https://learn.unity.com/project/john-lemon-s-haunted-jaunt-3d-beginner?language=en

文章用于自己对学习内容进行梳理

阅读全文 »

抽象

发表于 2019-04-19 | 评论数:

抽象类总结规定

    1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
    1. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
    1. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
    1. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
    1. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

重写重载

发表于 2019-04-19 | 评论数:

重写

  • 参数列表必须完全与被重写方法的相同;
  • 返回类型必须完全与被重写方法的返回类型相同;
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法

重载

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

重载规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。

重写与重载之间的区别

区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)
12
T_LS

T_LS

14 日志
9 标签
© 2021 T_LS
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Gemini v7.0.1