加入收藏 | 设为首页 | 会员中心 | 我要投稿 平顶山站长网 (https://www.0375zz.cn/)- 分布式云、数据处理、媒体处理、图像分析、基础存储!
当前位置: 首页 > 站长资讯 > 动态 > 正文

程序本身如何知道自身大小?

发布时间:2021-02-05 11:28:43 所属栏目:动态 来源:互联网
导读:这种方法的优点就在于: 编程简单,非常容易理解 由于各个进程的地址空间是相互隔离的,因此一个进程崩溃后并不会影响其它进程 充分利用多核资源 多进程并行处理的优点很明显,但是缺点同样明显: 各个进程地址空间相互隔离,这一优点也会变成缺点,那就是进

这种方法的优点就在于:

  1. 编程简单,非常容易理解
  2. 由于各个进程的地址空间是相互隔离的,因此一个进程崩溃后并不会影响其它进程
  3. 充分利用多核资源

多进程并行处理的优点很明显,但是缺点同样明显:

  1. 各个进程地址空间相互隔离,这一优点也会变成缺点,那就是进程间要想通信就会变得比较困难,你需要借助进程间通信(IPC,interprocess communications)机制,想一想你现在知道哪些进程间通信机制,然后让你用代码实现呢?显然,进程间通信编程相对复杂,而且性能也是一大问题
  2. 我们知道创建进程开销是比线程要大的,频繁的创建销毁进程无疑会加重系统负担。

当在读这篇文章的时候,你有没有想过,服务器是怎么把这篇文章发送给你的呢?

说简单也简单,不就是一个用户请求吗?服务器根据请求从数据库中捞出这篇文章,然后通过网络发回去。

说复杂也复杂,服务器是如何并行处理成千上万个用户请求呢?这里面涉及到哪些技术呢?

这篇文章就来为你解答这个问题。

多进程

历史上最早出现也是最简单的一种并行处理多个请求的方法就是利用多进程。

比如在Linux世界中,我们可以使用fork、exec等系统调用创建多个进程,我们可以在父进程中接收用户的连接请求,然后创建子进程去处理用户请求,就像这样:
 

ey-generator.column 表示主键字段,key-generator.type 为主键 ID 生成方案(内置或自定义的),key-generator.props.worker.id 为机器ID,在主键生成方案设为 SNOWFLAKE 时机器ID 会参与位运算。

在使用 sharding-jdbc 分布式主键时需要注意两点:

  • 一旦 insert 插入操作的实体对象中主键字段已经赋值,那么即使配置了主键生成方案也会失效,最后SQL 执行的数据会以赋的值为准。
  • 不要给主键字段设置自增属性,否则主键ID 会以默认的 SNOWFLAKE 方式生成。比如:用 mybatis plus 的 @TableId 注解给字段 order_id 设置了自增主键,那么此时配置哪种方案,总是按雪花算法生成。
  • 下面我们从源码上分析下 sharding-jdbc 内置主键生成方案 UUID、SNOWFLAKE 是怎么实现的。

UUID

打开 UUID 类型的主键生成实现类 UUIDShardingKeyGenerator 的源码发现,它的生成规则只有 UUID.randomUUID() 这么一行代码,额~ 心中默默来了一句卧槽。

UUID 虽然可以做到全局唯一性,但还是不推荐使用它作为主键,因为我们的实际业务中不管是 user_id 还是 order_id 主键多为整型,而 UUID 生成的是个 32 位的字符串。

它的存储以及查询对 MySQL 的性能消耗较大,而且 MySQL 官方也明确建议,主键要尽量越短越好,作为数据库主键 UUID 的无序性还会导致数据位置频繁变动,严重影响性能。


(编辑:平顶山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读