sqlite 数据库字典

sqlite 数据库字典 http://blog.itpub.net/133735/viewspace-757028/ http://www.th7.cn/Article/sj/ms/201001/374550.html

2015-03-06 · 1 min · 4 words · -

user_tables num_rows

user_tables num_rows 高水位线应该是最高值而不可能是低于700万的值 根据英文资料: but it’s base on your table analysis strategy,may be not accurate select ‘analyze table ‘||S.TABLE_NAME||’ compute statistics;’ from user_tables s; 翻译如下: 但是它是基于你的表分析策略,由于时间的关系,可能已经不准确了。 如果你要准确,可以 select ‘analyze table ‘||S.TABLE_NAME||’ compute statistics;’ from user_tables s; 后的所有脚本,再运行统计行数。 也就是USER_TABLES中存储的是上一次分析之后的值,而不是准确值.

2015-03-06 · 1 min · 38 words · -

part component

part component http://www.hscode.net/article/glxyx/1caa8dfa-f324-46cf-af72-a3dd675e7488

2015-03-05 · 1 min · 3 words · -

数据库主键设计

数据库主键设计 surrogate key (单主键), composite primary keys (联合主键) https://www.zhihu.com/question/265739203 https://stackoverflow.com/questions/2667988/why-single-primary-key-is-better-than-composite-keys 如果使用 b-tree 索引形式,有序 id 比无序 id 好,如果是 hash 索引,两个差别不大。主要原因是索引在磁盘上存储的形式, 常用的 b-tree 索引如果 id 是连续的,那么数据存储在相邻的磁盘上,如果查询和写入操作的 id 连续,那么减少随机读写硬盘的几率,提升读写效率。 作者:郭麒 链接:https://www.zhihu.com/question/43500172/answer/95876101 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 以默认的 innodb 存储引擎为例:做为主键时,uuid和自增相比较,自增更适合。原因:1 uuid是无序的, 插入数据时,页的位置会发生变化,页分裂,速度慢。 2 uuid占的空间大,并且innodb中,别的索引还都要包含主键的值,那么每个索引的空间也都会增大,占的空间大,需要读数据时一般会认为需要的io次数多。 作者:河南-老宋 链接:https://www.zhihu.com/question/43500172/answer/113356943 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 innodb 中的主键是聚簇索引,会把相邻主键的数据安放在相邻的物理存储上。如果主键不是自增,而是随机的,那么频繁的插入会使 innodb 频繁地移动磁盘块,而影响写入性能。 作者:Java编程宇宙 链接:https://www.zhihu.com/question/43500172/answer/2285446787 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 因为 uuid 相对顺序的自增 id 来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后,而是需要为新行寻找新的合适的位置从而来分配新的空间。这个过程需要做很多额外的操作,数据的毫无顺序会导致数据分布散乱,将会导致以下的问题:1)写入的目标页很可能已经刷新到磁盘上并且从缓存上移除,或者还没有被加载到缓存中,innodb在插入之前不得不先找到并从磁盘读取目标页到内存中,这将导致大量的随机IO2)因为写入是乱序的,innodb不得不频繁的做页分裂操作,以便为新的行分配空间,页分裂导致移动大量的数据,一次插入最少需要修改三个页以上3)由于频繁的页分裂,页会变得稀疏并被不规则的填充,最终会导致数据会有碎片在把随机值 (uuid和雪花id)载入到聚簇索引(innodb默认的索引类型)以后,有时候会需要做一次OPTIMEIZE TABLE来重建表并优化页的填充,这将又需要一定的时间消耗。结论:使用innodb应该尽可能的按主键的自增顺序插入,并且尽可能使用单调的增加的聚簇键的值来插入新行2.3 使用自增 id 的缺点那么使用自增的id就完全没有坏处了吗?并不是,自增id也会存在以下几点问题:1)别人一旦爬取你的数据库,就可以根据数据库的自增id获取到你的业务增长信息,很容易分析出你的经营情况2)对于高并发的负载,innodb在按主键进行插入的时候会造成明显的锁争用,主键的上界会成为争抢的热点,因为所有的插入都发生在这里,并发插入会导致间隙锁竞争3)Auto_Increment锁机制会造成自增锁的抢夺, 有一定的性能损失 附:Auto_increment的锁争抢问题,如果要改善需要调优innodb_autoinc_lock_mode 的配置 https://www.zhihu.com/question/43500172 http://www.cnblogs.com/tintown/archive/2005/03/02/111459.html 数据库主键设计之思考 在我们的数据库设计中,不可逃避的就是数据库表的主键,可能有很多朋友没有深入思考过,主键的设计对整个数据库的设计影响很大,因此我们不得不要重视起来。 主键的必要性: 有些朋友可能不提倡数据库表必须要主键,但在我的思考中,觉得每个表都应该具有主键,不管是单主键还是双主键,主键的存在就代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,本记录的修改与删除,当我们没有主键时,这些操作会变的非常麻烦。 主键的无意义性: 我强调主键不应该具有实际的意义,这可能对于一些朋友来说不太认同,比如订单表吧,会有"订单编号"字段,而这个字段呢在业务实际中本身就是应该具有唯一性,具有唯一标识记录的功能,但我是不推荐采用订单编号字段作为主键的,因为具有实际意义的字段,具有"意义更改"的可能性,比如订单编号在刚开始的时候我们一切顺利,后来客户说"订单可以作废,并重新生成订单,而且订单号要保持原订单号一致",这样原来的主键就面临危险了。因此,具有唯一性的实际字段也代表可以作为主键。因此,我推荐是新设一个字段专门用为主键,此主键本身在业务逻辑上不体现,不具有实际意义。而这种主键在一定程序增加了复杂度,所以要视实际系统的规模大小而定,对于小项目,以后扩展不会很大的话,也查允许用实际唯一的字段作主键的。 ...

2015-03-04 · 3 min · 443 words · -

JPA criteria 查询,更新,删除

JPA criteria 查询,更新,删除 http://my.oschina.net/zhaoqian/blog/133500 http://www.thoughts-on-java.org/2013/10/criteria-updatedelete-easy-way-to.html

2015-02-22 · 1 min · 5 words · -

SonarQube

SonarQube SonarQube (曾用名Sonar (声纳) [1]) 是一个开源的代码质量管理系统。 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在Bug、注释和软件设计报告 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测 sonarQube能带来什么? Developers’ Seven Deadly Sins 1.糟糕的复杂度分布 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试 2.重复 显然程序中包含大量复制粘贴的代码是质量低下的 sonar可以展示源码中重复严重的地方 3.缺乏单元测试 sonar可以很方便地统计并展示单元测试覆盖率 4.没有代码标准 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写 5.没有足够的或者过多的注释 没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷 6.潜在的bug sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug 7.糟糕的设计 (原文Spaghetti Design,意大利面式设计) 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系 可以检测自定义的架构规则 通过sonar可以管理第三方的jar包 可以利用LCOM4检测单个任务规则的应用情况 检测耦合 关于Spaghetti Design: http://docs.codehaus.org/display/SONAR/Spaghetti+Design 通过sonar可以有效检测以上在程序开发过程中的七大问题 SonarQube安装 预置条件 1.已安装JAVA环境 2.已安装有MySQL数据库 软件下载地址: http://www.sonarqube.org/downloads/ 下载SonarQube与SonarQube Runner 中文补丁包下载: http://docs.codehaus.org/display/SONAR/Chinese+Pack 1.数据库配置 MySQL> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; MySQL> CREATE USER ‘sonar’ IDENTIFIED BY ‘sonar’; MySQL> GRANT ALL ON sonar.* TO ‘sonar’@’%’ IDENTIFIED BY ‘sonar’; ...

2015-02-12 · 2 min · 330 words · -

Javascript异步编程

Javascript异步编程 http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 一、回调函数 二、事件监听 三、发布/订阅 四、Promises对象

2015-02-11 · 1 min · 6 words · -

设置MySQL允许外网访问

设置MySQL允许外网访问 1.修改配置文件 sudo vim /etc/MySQL/my.cnf 把bind-address参数的值改成你的内/外网IP或0.0.0.0,或者直接注释掉这行. 解决MySQL不允许从远程访问的方法 解决方法: 1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入MySQL后,更改 “MySQL” 数据库里的 “user” 表里的 “host” 项,从"localhost"改称"%" MySQL -u root -pvmwareMySQL>use MySQL; MySQL>update user set host = ‘%’ where user = ‘root’; MySQL>select host, user from user; MySQL>FLUSH PRIVILEGES 使修改生效.就可以了

2015-02-10 · 1 min · 38 words · -

free command

free command free命令可以查看系统内存的使用情况,-m 参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数, 和用于文件系统页缓存的内存数。需要注意的是, 第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。 这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。 如果可用内存非常少,系统可能会动用交换区 (如果配置了的话) ,这样会增加IO开销 (可以在iostat命令中提现) ,降低系统性能。 free -h free -m total used free shared buff/cache available Mem: 8.7Gi 4.6Gi 437Mi 1.0Mi 3.8Gi 3.9Gi Swap: 0B 0B 0B Mem:表示物理内存统计。 total:表示物理内存总量( total = used + free + buff/cache )。 used:total - free - buff/cache, 表示总计分配给缓存 (包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存。Memory used (mostly) by tmpfs (Shmem in /proc/meminfo) buffers:kernel buffers, 系统分配但未被使用的buffers数量。 cached:page cache and slabs, 系统分配但未被使用的cache数量。 available: 启动新的应用程序时可以使用的内存, buffers/cache:表示物理内存的缓存统计。 used2:也就是第一行中的used – buffers - cached也是实际使用的内存总量。 // used2为第二行 free2 = buffers1 + cached1 + free1 // free2为第二行,buffers1等为第一行 free2:未被使用的buffers与cache和未被分配的内存之和,这就是系统当前实际可用内存。 Swap:表示硬盘上交换分区的使用情况。

2015-02-10 · 1 min · 91 words · -

SEM

SEM SEM是Search Engine Marketing的缩写,中文意思是搜索引擎营销。SEM是一种新的网络营销形式。SEM所做的就是全面而有效的利用搜索引擎来进行网络营销和推广。 从狭义角度来讲,SEM就是在搜索平台上投放广告;而SEO则是通过优化目标网站,从而对搜索引擎更加友好。 但从广义角度来说,SEM包含SEO。SEO是SEM的一部分,是搜索引擎营销的其中一个环节。 SEM的四种服务方式: 竞价排名、点击付费、关键词广告、SEO。 竞价排名,顾名思义就是网站付费后才能被搜索引擎收录,付费越高者排名越靠前;竞价排名服务,是由客户为自己的网页购买关键字排名,按点击计费的一种服务。客户可以通过调整每次点击付费价格,控制自己在特定关键字搜索结果中的排名;并可以通过设定不同的关键词捕捉到不同类型的的目标访问者。 而在国内最流行的点击付费搜索引擎有百度,雅虎和Google。值得一提的是即使是做了PPC (Pay Per Click,按照点击收费) 付费广告和竞价排名,最好也应该对网站进行搜索引擎优化设计,并将网站登录到各大免费的搜索引擎中。 购买关键词广告,即在搜索结果页面显示广告内容,实现高级定位投放,用户可以根据需要更换关键词,相当于在不同页面轮换投放广告; 搜索引擎优化 (SEO) ,就是通过对网站优化设计,使得网站在搜索结果中靠前。 搜索引擎优化(SEO)又包括网站内容优化、关键词优化、外部链接优化、内部链接优化、代码优化、图片优化、搜索引擎登录等. PPC ( Pay Per call,按照有效通话收费 ) ,比如: “TMTW来电付费”,就是根据有效电话的数量进行收费。购买竞价广告也被称做PPC 国内搜索引擎营销公司 (SEM) 有SEM工具的 二、无SEM工具的 有工具的: adsage 工具: AFS 特点: 节省人工 国双 SEM 特点: 很炫,也节省人工 分析工具: WebDissector 特点: 小型GA 博雅立方 工具: CubeSearch 特点: 节省人工 无工具的: 紫博蓝 品众互动 中企动力 亿玛 赛美特 网迈 http://www.zhihu.com/question/20307058

2015-02-10 · 1 min · 58 words · -

java rss lib 评测

java rss lib 评测 http://blog.csdn.net/zhaozexin/article/details/282333 前两天上新浪,看到新浪 RSS 频道开通,不容易啊,等了这么久。 我的目标是做一个简单的portlet,每次读取新浪的RSS站点显示最新的新闻条目。 花了一个下午,去sourceforge和google 上搜索 opensource 的 java rss lib,还真有不少 (顺便提一下,sourceforget的搜索真的很烂) 。简单过滤以后,觉得以下三个类库比较有搞头。Rome 、rssutils和rsslib4j。具体的评测如下: 一. Rome Rome 是 java.net 上的一个开源项目,现在的版本是0.5。为什么叫Rome呢,按它的介绍上的说法,有个"条条大路通罗马"的意思,有些RSS的意味。Rome可能是 sun 公司从自己某个子项目中抽离出来的,package和类的命名就象j2sdk一样感觉规范。功能上支持RSS的所有版本及 Atom 0.3(Atom是和RSS类似的一种内容聚合的方式)。Rome 本身是提供API和功能实现,其下独立出一个 rome-fetcher 项目,专门用来读取RSS内容。正和我意啊。 参照 fetcher 上的范例,解析 RSS 相当简单,代码片断如下: FeedFetcher fetcher = new HttpURLFeedFetcher(); SyndFeed feed = fetcher.retrieveFeed(feedUrl); System.out.println(feedUrl + " has a title: " + new String(feed.getTitle().getBytes(“iso8859-1”), “utf-8”) + " and contains " + feed.getEntries().size() + " entries."); for (Iterator iter = feed.getEntries().iterator(); iter.hasNext(); ) { ...

2015-02-09 · 2 min · 332 words · -

jsdom

jsdom jsdom 是一个纯粹由 JavaScript 实现的一系列 Web 标准,特别是 WHATWG 组织制定的 DOM 和 HTML 标准,用于在 Node.js 中使用。 大体上来说,该项目的目标是模拟足够的 Web 浏览器子集,以便用于测试和挖掘真实世界的 Web 应用程序。 import {JSDOM} from "jsdom" test('infoQ test', () => { const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`); console.log("foo test:", dom.window.document.querySelector("p").textContent); // "Hello world" }); 作者:0D0A 链接:https://juejin.cn/post/7151065517569081380 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2015-02-09 · 1 min · 47 words · -

mac os terminal, Creating New Users

‘mac os terminal, Creating New Users’ http://www.maclife.com/article/columns/terminal_101_creating_new_users Every Monday, we’ll show you how to do something new and simple with Apple’s built-in command line application. You don’t need any fancy software, or a knowledge of coding to do any of these. All you need is a keyboard to type ’em out! Adding users through the GUI in OS X is an easy process, but sometimes, you may just need to quickly create an SSH user, or a user that is allowed to SFTP or FTP into the system. You can easily create a stripped-down account in OS X using the dscl command, and we’ll show you how in this week’s Terminal 101. Continue reading to learn all about creating new users through the Terminal. ...

2015-02-06 · 2 min · 383 words · -

RPC, Message Queue, MQ

RPC, Message Queue, MQ http://oldratlee.com/post/2013-02-01/synchronous-rpc-vs-asynchronous-message RPC 和 MQ 的区别 系统结构 RPC系统结构: Consumer 调用的 Provider 提供的服务。 +———-+—–+———-+ | Consumer | <=> | Provider | +—-+—–+—–+———-+ Message Queue 系统结构: Sender 发送消息给 Queue; Receiver 从 Queue 拿到消息来处理。 +——–+—–+——-+—–+———-+ | Sender | <=> | Queue | <=> | Receiver | +——–+—–+——-+—–+———-+ 功能特点 在架构上, RPC 和 Message 的差异点是, Message 有一个中间结点 Message Queue, 可以存储消息。 消息的特点 Message Queue 缓存请求压力, 然后逐渐释放出来, 消费者可以按照自己的节奏处理数据。 Message Queue 引入一个新的结点, 系统的可靠性会受 Message Queue 的影响。 Message Queue 是异步单向的消息。发送消息设计成是不需要等待消息处理的完成。 所以对于有同步返回需求, 用 Message Queue 则变得麻烦了。 ...

2015-02-06 · 1 min · 163 words · -

Linux 文件权限

Linux 文件权限 拥有者 owner, 群组 group, 其它组 other 模式 数字 rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 -x- 1 --- 0 http://zhangfeikr.blog.51cto.com/1999170/396541 一个用户、一个组 我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个组。这正是 Linux 中权限模型的核心。您可以在 ls -l 清单中查看用户和组: $ ls -l /bin/bash -rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash 在这个特殊的示例中,/bin/bash 可执行文件属于 root 用户,并且在 wheel 组中。Linux 权限模型通过允许给每个文件系统对象设置三种独立的权限级别来工作 — 它们为文件的所有者、文件的组以及所有其他用户。 理解"ls -l" 我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏: $ ls -l /bin/bash -rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash 第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。该字段中的首字符 (-) 指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有: ...

2015-02-06 · 4 min · 655 words · -

remote dev

remote dev virtualbox windows 宿主机, archlinux 虚拟机, virtualbox 安装增强包, 使用 seamless mode vscode remote ssh jetbrain remote development beta 版本 不稳定. vm@server, xforward 延迟: 22ms 内存: 16G+ cpu: 8c 无线网带宽问题,延迟 编辑器内部纵向滚动屏幕带宽占用峰值2300KB/s vm@server, rdp Ubuntu 22.04 安装 xrdp 开放 3389 端口, win10 mstsc 连接到 3389, 拖动窗口有延迟, 编辑器内部纵向滚动屏幕延迟可以接受. 拖动窗口带宽占用峰值 1700KB/s, 编辑器内部纵向滚动屏幕带宽占用峰值500KB/s 延迟: 22ms 内存: 16G+ cpu: 8c vm@server, vnc 延迟: 22ms 内存: 16G+ cpu: 8c 图形界面延迟 基于像素的传输,画质不好. wsl + x server 延迟: <1ms 内存: 16G+ cpu: 4c 内存占用问题 wsl + idea 延迟: <1ms 内存: 16G+ cpu: 4c 磁盘性能问题 windows + idea 延迟: <1ms 内存: 16G+ cpu: 4c ansible,git,leveldb 问题

2015-02-05 · 1 min · 97 words · -

ARC 与 GC 区别

ARC 与 GC 区别 http://my.oschina.net/u/566401/blog/109020 the short and sweet answer is as follow: 1.GC of java is Runtime, while ARC is compile time. 2.GC has reference to the objects at runtime and check for the dependencies of object runtime. While ARC appends the release, retain, autorelease calls at compiletime. **更多链接: ** 1.http://stackoverflow.com/questions/6385212/how-does-the-new-automatic-reference-counting-mechanism-work 2.http://stackoverflow.com/questions/7900167/objective-c-2-0-garbage-collector-vs-automatic-reference-counter-in-iOS-5-sdk 3.http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/

2015-02-05 · 1 min · 54 words · -

JAVA JIT Compiler(Just-in-timeCompiler) 即时编译

‘JAVA JIT Compiler(Just-in-timeCompiler) 即时编译’ JIT Compiler(Just-in-timeCompiler) 即时编译 最早的Java建置方案是由一套转译程式 (interpreter) ,将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。 针对这个问题,业界首先开发出JIT (just in time) 编译器。当Java执行runtime环境时,每遇到一个新的类别 (class: 类别是Java程式中的功能群组) ,JIT编译器在此时就会针对这个类别进行编译 (compile) 作业。经过编译后的程式,被优化成相当精简的原生型指令码 (native code) ,这种程式的执行速度相当快。花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。 基于对JIT的经验,业界发展出动态编译器 (dynamiccompiler) ,动态编译器仅针对较常被执行的程式码进行编译,其余部分仍使用转译程式来执行。也就是说,动态编译器会研判是否要编译每个类别。动态编译器拥有两项利器: 一是转译器,另一则是JIT,它透过智慧机制针对每个类别进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态编译器针对程式的特性或者是让程式执行几个循环,再根据结果决定是否编译这段程式码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态编译器会根据「历史资料」做决策,所以程式执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态编译器产生的程式码执行的速度超越以前的JIT技术,平均速度可提高至50%。 http://baike.baidu.com/view/132440.htm?fromtitle=jit&fromid=2039740&type=syn

2015-02-05 · 1 min · 28 words · -

协程, Coroutine

协程, Coroutine 协程别名: 微线程,纤程。英文:Coroutine, Green threads, fibers 传统编程语言中子程序或者函数是层级调用的,函数可以调用其它函数, 调用者需要等待被调用者结束之后继续执行, 函数调用是通过栈实现的. 一个线程就是按顺序执行一个或几个子函数, 函数调用只有一个入口和一个出口. 协程看上去也是函数,但是执行过程中在子程序内部可以中断,然后执行别的函数, 然后再被调度回来执行. 协程比线程有更高的执行效率, 协程没有线程切换的开销 协程在用户空间调度, 不涉及系统调用或任何阻塞调用, 不需要用来守卫关键区块的同步性原语(primitive)比如互斥锁、信号量等,并且不需要来自操作系统的支持 协程不需要多线程的锁机制, 为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。 协程是协作式多任务的, 线程典型是抢占式多任务的 因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。 使用抢占式调度的线程实现协程,但是会失去某些利益(特别是对硬性实时操作的适合性和相对廉价的相互之间切换)。 协程是语言层级的构造,可看作一种形式的控制流,而线程是系统层级的构造 生成器 生成器,也叫作“半协程”[8],是协程的子集。 https://www.liaoxuefeng.com/wiki/1016959663602400/1017968846697824 https://zh.wikipedia.org/wiki/%E5%8D%8F%E7%A8%8B 有栈协程 有栈协程的好处,由于栈帧可以直接完全保存运行期上下文(主要是寄存器值),因此可以在任何时刻暂停协程的运行,这就很方便地支持了抢占式的调度器。 无栈协程 有栈协程的好处,由于栈帧可以直接完全保存运行期上下文(主要是寄存器值),因此可以在任何时刻暂停协程的运行,这就很方便地支持了抢占式的调度器。而无栈协程的上下文是一般通过类似结构体的方式保存在内存中,它依赖使用者显式地切换协程,否则协程不会主动让出执行权。 另外,有栈协程更方便将同步代码改造为异步代码,就像我们的例子一样,只需改动一行,加上go关键字就可以了。而无栈协程,同步改造为异步则更为复杂,甚至会导致牵一发动全身(async关键字扩散问题)。 Rust无栈协程 既然已经有了有栈协程,那么无栈协程是否还有优势呢。答案肯定的! 通常,无栈协程在内存空间和协程上下文切换的效率更高。值得说明的是,无栈协程并不是说不需要运行时的栈空间,而是和协程的创建者共用同一块运行时的栈空间。 如果一定要用一句话概括无栈协程,那就是:无栈协程可以看做是有状态的函数(generator),每次执行时会根据当前的状态和输入参数,得到(generate)输出,但不一定为最终结果。

2015-02-04 · 1 min · 39 words · -

Conway's law, 康威定律

Conway’s law, 康威定律 康威 (梅尔·康威)定律 任何组织在设计一套系统 (广义概念上的系统)时,所交付的设计方案在结构上都与该组织的沟通结构保持一致。 https://www.cnblogs.com/ghj1976/p/5703462.html 康威定律——“设计系统的组织,最终产生的设计等同于组织之内、之间的沟通结构。” 康威定律,其内涵是: 设计系统的组织,最终产生的设计等同于组织之内、之间的沟通结构。 Conway’s law(康威定律) Posted on 2016-07-25 14:43 蝈蝈俊 阅读(1952) 评论(0) 编辑 收藏 Mel Conway 康威在加利福尼亚理工学院获得物理学硕士学位,在凯斯西储大学获得数学博士学位。毕业之后,他参与了很多知名的软件项目,如 Pascal 编辑器。在他的职业生涯中,康威观察到一个现象: 软件团队开发的产品是对公司组织架构的反映。 1967 年他针对这个现象提交了一篇论文。 (http://www.melconway.com/Home/Conways_Law.html) 给 《哈佛商业评论》。结果程序员屌丝的文章不入商业人士的法眼,无情被拒,康威就投到了一个编程相关的杂志,所以被误解为是针对软件开发的。 最初这篇文章显然不敢自称定律 (law) ,只是描述了作者自己的发现和总结。后来,在Brooks Law著名的人月神话中,引用这个论点,并将其"吹捧"成了现在我们熟知"康威定律"。 image 康威定律的核心如下: Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure. 任何设计系统的组织,必然会产生以下设计结果: 即其结构就是该组织沟通结构的写照。简单来说: 产品必然是其组织沟通结构的缩影。 http://tech2ipo.com/102149

2015-01-29 · 1 min · 65 words · -