
int in=0,out=0;
void producer() //生产者程序
{
while(true)
{
item=produceItem(); //生产一个产品
putItemIntoBuffer(item); //将产品放入缓冲区
in=(in+1)mod n; //修改指针位置
}
}
void consumer() //消费者程序
{
while(true)
{
item=removeItemFromBuffer(); //从缓冲区取走一个产品
out=(out+1)mod n; //修改指针位置
consumeItem(item); //消费该产品
}
}
[图片上传失败…(image-fc3b3-1561301259496)]
UDP
[图片上传失败…(image-38f695-1561301259496)]

表的字段、外键必须有键值;数据量达到300的表必须有索引;经常与其它表进行联结的表,在联接字段上需要创建键值;经常出现在Where子句中的数组,特别是大表的数组,应该制定索引;索引需要建在选择性高的字段上;索引需要建在小字段上,对于大的文本字段或者超长字段,不要建索引;复合索引的构建必须进行认真剖析;尽量考虑用单字段索引代替:频繁进行数据操作的表,不要建立很多的索引;删除无用的索引,避免对执行计划产生消极影响;
索引的构建需要尽早,对每位索引的必要性都需要经过认真剖析,要有完善的根据。
因为很多的索引与不充分、不恰当的索引对性能都颇具益处:在表上构建的每个索引就会减少内存花费,索引对于插入、删除、更新操作也会降低处理上的开销。
另外,过多的复合索引,在有单字段索引的状况下,一般都是没有存在价值的; 相反,还会减少数据提高删除时的性能,特别是对经常升级的表来说,负面影响更大。

总的来说,小型表肯定不建索引,或者记录在亿条数据级以上多线程死锁的伪代码,还是建议使用非关系型。
还有些特殊字段的,比如BLOB,CLOB字段肯定也不合适建索引。其实这个问题更觉得偏向于做硬件项目的一种经验。
一个URL加载的过程
多态就是多种形态。 继承了就有多态了。 继承了就具备父类的方式,然后基类才能够覆写父类方法多线程死锁的伪代码,子类即可够调用该方式推动自己的意愿。

这样的好处就是,一个方法名在不同的子类里带有不同的作用。
策略方式与状态模式
信号量阻塞线程
//在主线程写一段代码,并运行
NSLog(@"1");
dispatch_semaphore_t s = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"2");
dispatch_semaphore_signal(s);
});
});
NSLog(@"3");
dispatch_semaphore_wait(s, DISPATCH_TIME_FOREVER);
NSLog(@"4");

由于代码执行到 dispatch_semaphore_wait 会阻塞主线程, 等待信号量释放, 此时在轮询线程添加信号量释放得不到执行才会常常阻塞主线程
耗时操作放在主线程, 会堵塞主线程, 防止阻塞的方式就是讲耗时操作放在子线程中处理使用 dispatch_sync 在主线程执行任务
dispatch_queue_t main = dispatch_get_main_queue();
NSLog(@"*********1");
dispatch_sync(main, ^(){
NSLog(@"*********2");
});
NSLog(@"*********3");
由于是同步执行,而且block中的任务在主队列的线性表中的后面有个dispatch_sync()等待完成,而dispatch_sync()的完成又依赖于block的执行完成,就这样造成了死锁。
同理, dispatch_sync() 使用串行队列也会导致死锁
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-122751-1.html
在短短十个月内连阿里在美股票市场都能在一百二十美金跌破发行价
帅呀