Objective-C 初体验 -- 语法篇
拿到MBP也有3个礼拜了
上个礼拜总算有时间好好看了一下 Objective-C
Objective-C 可以说是一个静态语言,但又有很多动态特性.这点上感觉和ActionScript很象,不过ActionScript是纯脚本语言了
在这里也记录一下,用其他语言来类比它的一些特性和实现,会以Java为主结合C/C++,ActionScript等,方便兄弟们学习更快掌握 和 同乐
拿到MBP也有3个礼拜了
上个礼拜总算有时间好好看了一下 Objective-C
Objective-C 可以说是一个静态语言,但又有很多动态特性.这点上感觉和ActionScript很象,不过ActionScript是纯脚本语言了
在这里也记录一下,用其他语言来类比它的一些特性和实现,会以Java为主结合C/C++,ActionScript等,方便兄弟们学习更快掌握 和 同乐
最近TDH_Socket在 淘宝 某核心应用上进行了一次业务压测
|
TDH_SOCKET |
HandlerSocket |
SQL |
IO策略 |
Dynamic IOStrategy |
Same-thread IOStrategy |
one-thread-per-connection |
优点 | worker线程只处理与DB相关的逻辑 最大化DB的操作吞吐量 | 上下文切换真心很少 | 资源分离 不太会相互干扰 |
缺点 | 上下文切换一般,测试时最高在10w,但可以接受 | IO逻辑对DB逻辑影响较大 一旦io处理的慢了,会导致QPS下降很多(比如说较多的连接数并发请求导致io处理变慢也会是整体QPS下降) | 线程资源浪费严重,太多的线程会导致高并发是上下文切换多,从而影响性能,测试时最高60w |
读策略 |
|
|
|
优点 | 多种策略配合能一直输出较高的QPS | 在全缓存的请求下,输出的QPS很高 | 由于是一个连接一个请求,不会出现由带io的请求堵塞不带io的请求的情况出现 |
缺点 | 流控会丢失一部分请求, 预测请求带不带io不是非常准确 (如果使用row cache就能较精确的预测了) | 一旦有带io的请求出现,就很容易堵塞住不带io的请求出现,所以缓存命中率下降后QPS下降的非常厉害 返回大批量数据会占用过多内存 | 有极限一般QPS最高输出到6-7w |
写策略 |
|
|
|
优点 | 同一个表必然在同一个线程上执行,所以行锁的征用被降到最低,加上group commit就能提供很搞的TPS 可以多个写线程并发写,不会有死锁问题 支持batch小事务 | Group commit可以减少fsync次数,提高写性能 | 支持大事务 |
缺点 | 写线程数有限,在有io堵塞请求下,性能会有下降 | 同一时刻只有一个写线程能被执行,很容易达到瓶颈,一旦有多表插入并发出现,很容易影响整体更新性能 生成binlog没有执行时间(bug) 多表insert会有自增id获取失败的问题(bug) | 性能受限于IOPS |
可维护性 |
|
|
最高 |
易用性 |
client.query().use("test").select("id", "a", "b", "c").from("t") .where().fields("a").in(["1", "1"], ["2"], ["1"]).get())
|
|
最高 |
TDH_Socket开源啦
源码地址: https://github.com/alibaba/TDH_Socket
同时还开源了Java客户端: https://github.com/alibaba/tdhs-java-client
现在介绍一下TDH_Socket:
TDH_Socket是一个MySQL daemon plugin 类似于HandlerSocket(https://github.com/DeNADev/HandlerSocket-Plugin-for-MySQL)
现在TDH_Socket能接受客户端的TCP请求,并且直接通过MySQL的Handler层访问数据,绕开了SQL解析等一系列逻辑
TDH_Socket的Java客户端可以通过在客户端解析SQL的方式提供JDBC接口来提高易用性,并且也不会降低性能
TDH_Socket的一些特性和优点:
易用
1. 不需要在一开始open_table,会在具体执行时open_table,被open的table还是会被当前线程cache住,下次请求不需要再次open
支持多线程的并发写操作
1. 默认情况下,对一个表的写操作都会在一个固定的线程被执行,从而避免可能的死锁
设计模式中的状态模式
这是标准的状态模式.其中Context管理所有状态,而每个状态都是自己的类,而状态的流转逻辑由状态自己执行.
然后完整的状态模式实现太过”重”,而且状态流转的描述在代码上也不会是一目了然.所以我对状态模式进行了简化和优化.使其很”轻”,易于使用和实现,而且对于状态流转在代码上也能一目了然.所有的流转逻辑都能在一屏上显示出来.
先来介绍一下重新优化后的状态模式的一些概念:
最近给某东西压测(由于是私有协议没有通用工具可用),就自己写了个可以给压力的工具,可以支持QPS显示和响应时间的分布显示,有兴趣的可以拿来玩玩
最近整理女儿的照片,想按日期对照片进行分类,以便看看女儿每个阶段的成长
网上一搜 找到了PhotoTool和Adebis_Photo_Sorter支持按日期分类整理
可惜PhotoTool直接crash,Adebis_Photo_Sorter倒是ok就是不支持视频的
好吧,只有自己动手写一个咯
有需要的可以自己动手改改立马就能跑起来哦