当前位置: 首页 > news >正文

对网站建设在电子商务中的看法wordpress %1$s

对网站建设在电子商务中的看法,wordpress %1$s,网络购物平台有哪几个,鹏鹞网站页面代码前言 Sparrow RTOS是笔者之前写的一个极简性RTOS#xff0c;初代版本只有400行#xff0c;后面笔者又添加了消息队列、信号量、互斥锁三种IPC机制#xff0c;使之成为一个较完整、堪用的内核#xff0c;初代版本以简洁为主#xff0c;使用数组和表作为任务挂载的抽象数据…前言 Sparrow RTOS是笔者之前写的一个极简性RTOS初代版本只有400行后面笔者又添加了消息队列、信号量、互斥锁三种IPC机制使之成为一个较完整、堪用的内核初代版本以简洁为主使用数组和表作为任务挂载的抽象数据结构对数表版本的Sparrow RTOS总结如下 缺陷 由于数组和表的限制该版本并不支持同优先级和时间片功能设计互斥锁时也受到一定影响而且最大只支持32个任务有许多不便之处。 优点 使用数表存储任务对任务的挂载以位操作和下标操作为主内核简洁小巧执行效率高适用于任务较少、硬件资源少的情况。 链表版本内核的设计 使用链表作为任务挂载的数据结构能够实现同优先级、时间片等功能对任务对象的操作也更加灵活。 链表设计 #mermaid-svg-NhpeYOzWAtPHdXx7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .error-icon{fill:#552222;}#mermaid-svg-NhpeYOzWAtPHdXx7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NhpeYOzWAtPHdXx7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .marker.cross{stroke:#333333;}#mermaid-svg-NhpeYOzWAtPHdXx7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster-label text{fill:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster-label span{color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .label text,#mermaid-svg-NhpeYOzWAtPHdXx7 span{fill:#333;color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .node rect,#mermaid-svg-NhpeYOzWAtPHdXx7 .node circle,#mermaid-svg-NhpeYOzWAtPHdXx7 .node ellipse,#mermaid-svg-NhpeYOzWAtPHdXx7 .node polygon,#mermaid-svg-NhpeYOzWAtPHdXx7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .node .label{text-align:center;}#mermaid-svg-NhpeYOzWAtPHdXx7 .node.clickable{cursor:pointer;}#mermaid-svg-NhpeYOzWAtPHdXx7 .arrowheadPath{fill:#333333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NhpeYOzWAtPHdXx7 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster text{fill:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 .cluster span{color:#333;}#mermaid-svg-NhpeYOzWAtPHdXx7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NhpeYOzWAtPHdXx7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 双向链表 双向链表 双向链表 双向链表 链表头部 链表头节点 链表节点 链表尾节点 任务链表由头部节点和任务节点两部分组成头部会指向头节点和尾节点头节点到尾节点之间会形成一个环路。 就绪列表设计 链表简化设计如下 #mermaid-svg-C09QcWYfovJLWfcZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .error-icon{fill:#552222;}#mermaid-svg-C09QcWYfovJLWfcZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-C09QcWYfovJLWfcZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-C09QcWYfovJLWfcZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-C09QcWYfovJLWfcZ .marker.cross{stroke:#333333;}#mermaid-svg-C09QcWYfovJLWfcZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-C09QcWYfovJLWfcZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster-label text{fill:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster-label span{color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .label text,#mermaid-svg-C09QcWYfovJLWfcZ span{fill:#333;color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .node rect,#mermaid-svg-C09QcWYfovJLWfcZ .node circle,#mermaid-svg-C09QcWYfovJLWfcZ .node ellipse,#mermaid-svg-C09QcWYfovJLWfcZ .node polygon,#mermaid-svg-C09QcWYfovJLWfcZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-C09QcWYfovJLWfcZ .node .label{text-align:center;}#mermaid-svg-C09QcWYfovJLWfcZ .node.clickable{cursor:pointer;}#mermaid-svg-C09QcWYfovJLWfcZ .arrowheadPath{fill:#333333;}#mermaid-svg-C09QcWYfovJLWfcZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-C09QcWYfovJLWfcZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-C09QcWYfovJLWfcZ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-C09QcWYfovJLWfcZ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster text{fill:#333;}#mermaid-svg-C09QcWYfovJLWfcZ .cluster span{color:#333;}#mermaid-svg-C09QcWYfovJLWfcZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-C09QcWYfovJLWfcZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 链表数组Index 链表头部Index1 任务节点 链表头部Index2 任务节点 链表头部Index3 任务节点 实际设计 #mermaid-svg-bfCdYGTlSweI3CJW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .error-icon{fill:#552222;}#mermaid-svg-bfCdYGTlSweI3CJW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bfCdYGTlSweI3CJW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bfCdYGTlSweI3CJW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bfCdYGTlSweI3CJW .marker.cross{stroke:#333333;}#mermaid-svg-bfCdYGTlSweI3CJW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bfCdYGTlSweI3CJW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster-label text{fill:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster-label span{color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .label text,#mermaid-svg-bfCdYGTlSweI3CJW span{fill:#333;color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .node rect,#mermaid-svg-bfCdYGTlSweI3CJW .node circle,#mermaid-svg-bfCdYGTlSweI3CJW .node ellipse,#mermaid-svg-bfCdYGTlSweI3CJW .node polygon,#mermaid-svg-bfCdYGTlSweI3CJW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bfCdYGTlSweI3CJW .node .label{text-align:center;}#mermaid-svg-bfCdYGTlSweI3CJW .node.clickable{cursor:pointer;}#mermaid-svg-bfCdYGTlSweI3CJW .arrowheadPath{fill:#333333;}#mermaid-svg-bfCdYGTlSweI3CJW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bfCdYGTlSweI3CJW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bfCdYGTlSweI3CJW .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-bfCdYGTlSweI3CJW .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster text{fill:#333;}#mermaid-svg-bfCdYGTlSweI3CJW .cluster span{color:#333;}#mermaid-svg-bfCdYGTlSweI3CJW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bfCdYGTlSweI3CJW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 双向链表 链表头部Index1 任务头节点 任务节点 任务尾节点 链表头部Index2 任务头节点 任务节点 任务尾节点 链表头部Index3 任务头节点 任务节点 任务尾节点 任务节点通过链表进行挂载那么怎么找到任务对象的起始地址呢 请读者想一想任务对象的成员都是已知的所以我们完全可以用链表节点的地址减去前面的成员的地址就能得到任务对象的起始地址然后再把起始地址类型转换为任务对象指针。 基于这个思想其实我们是可以在面向对象的语言中修改私有属性的如果这门语言支持指针这种直接操作内存的语法的话。 不过一个个算还是太麻烦了我们可以直接使用宏 //get father struct address //how to use it:struct parent *parent_ptr container_of(child_ptr, struct parent, child) #define container_of(ptr, type, member) \((type *)((char *)(ptr) - offsetof(type, member)))这样就可以直接通过链表找到任务对象起始地址了。 相对于初步的Sparrow RTOS链表版本的功能增加如下,增加了一个TimeSlice也就是时间片功能。 void xTaskCreate( TaskFunction_t pxTaskCode,const uint16_t usStackDepth,void * const pvParameters,uint32_t uxPriority,TaskHandle_t * const self,uint8_t TimeSlice)任务优先级设置 使用链表数组对应每个优先级因此我们可以通过设置链表数组的大小来更改支持的优先级范围。不过由于支持同优先级和时间片因此挂载的任务数量其实是不受限制的除非内存不够。 时间片 时间片是针对同优先级的说法当最高优先级有多个任务时每个任务会根据自身设置的时间片轮流享有CPU运行时间。 在时钟触发型RTOS中一个时间片就是两次systick时钟中断之间的响应间隔在Sparrow RTOS中默认为1ms。 例如 xTaskCreate( taskA,256,NULL,3,tcbTask1,1);xTaskCreate( taskB,256,NULL,3,tcbTask2,3); 对于taskA和taskB当最高优先级为3时这两个任务会轮流执行不过taskA只会执行1个时间片然后就会将CPU执行权交给taskBtaskB会执行三个时间片然后再将CPU执行权交给taskA如此反复循环如果最高优先级一直是3。 互斥锁设计 在Sparrow RTOS的数表版本中互斥锁的优先级反转功能是设置优先级为阻塞任务中最大的那个优先级1但是这样会导致浪费优先级对于可能发生阻塞的任务我们要确保这些任务的优先级必须设置合理不然会导致灾难的发生。 但是对于链表版本由于支持同优先级因此我们可以设置相同的优先级避免优先级反转现象的发生而不会占用额外的优先级。 原子操作 由于临界区屏蔽中断的较为粗暴所以对于简单的加减操作可以使用内核提供的原子操作例如 atomic_add(a,v),表示*v a atomic_inc(v),表示*v自加 考虑下面的情况 void taskA(){a; 任务切换发生另一个任务令a;b a;读取a但是a的值是错误的 }void taskB(){a;c a; a的值是错误的 } 我们使用A和B两个线程对a进行递增但是两个线程的递增可能是无效的例如 #mermaid-svg-GXBwjeAeIxkaOG7T {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .error-icon{fill:#552222;}#mermaid-svg-GXBwjeAeIxkaOG7T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GXBwjeAeIxkaOG7T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GXBwjeAeIxkaOG7T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GXBwjeAeIxkaOG7T .marker.cross{stroke:#333333;}#mermaid-svg-GXBwjeAeIxkaOG7T svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GXBwjeAeIxkaOG7T .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster-label text{fill:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster-label span{color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .label text,#mermaid-svg-GXBwjeAeIxkaOG7T span{fill:#333;color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .node rect,#mermaid-svg-GXBwjeAeIxkaOG7T .node circle,#mermaid-svg-GXBwjeAeIxkaOG7T .node ellipse,#mermaid-svg-GXBwjeAeIxkaOG7T .node polygon,#mermaid-svg-GXBwjeAeIxkaOG7T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GXBwjeAeIxkaOG7T .node .label{text-align:center;}#mermaid-svg-GXBwjeAeIxkaOG7T .node.clickable{cursor:pointer;}#mermaid-svg-GXBwjeAeIxkaOG7T .arrowheadPath{fill:#333333;}#mermaid-svg-GXBwjeAeIxkaOG7T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GXBwjeAeIxkaOG7T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GXBwjeAeIxkaOG7T .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GXBwjeAeIxkaOG7T .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster text{fill:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T .cluster span{color:#333;}#mermaid-svg-GXBwjeAeIxkaOG7T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GXBwjeAeIxkaOG7T :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 线程1读取counter值等于0 线程1增加counter值 CPU0写入counter值等于1 线程2读取counter值等于0 线程2增加counter值 线程1写入counter值等于1 最终counter值等于1 原子操作具有return版本,例如 int a atomic_inc_return(a,v);其实原子操作不仅可以保证线程操作的原子性也可以在多CPU条件下保证数据操作的原子性。 总结 以上就是对Sparrow RTOS链表版本内核的总结整体来看链表版本支持更多任务数量和功能但是执行效率和简洁性不如数表版本不过二者适用情景不同根据实际情况选择即可。 笔者本人更喜欢数表版本只使用了几百行程序就实现了RTOS的基本功能简洁明了同时也是一个良好的学习素材。笔者追求的程序风格一直都是模块化、高效、简洁明了数表版本的内核是非常令笔者得意的毕竟几千几万行的操作系统内核浩如烟海几百行的可不多见。 对于学习Sparrow RTOS的读者来说笔者推荐数表版本的内核虽然代码量不多但彻底搞懂并能更改代码可不容易。 结语 Sparrow RTOS将会持续维护更新不断完善其实笔者也是有为它添加设备树、驱动框架和网络协议栈这些功能的想法不过这都是后话了也许哪天会更新也许一直没时间做这些这都是不确定的。不过它的初衷就是一个学习用途的RTOS而它也确实非常适合这一任务。 最后笔者真诚希望读者都能在Sparrow RTOS的教程中收获对操作系统的思考与领悟操作系统的学习之路道阻且长在海滩拾贝的过程中希望读者也能收获属于自己的快乐。 以上与君共勉。 项目地址skaiui2/SKRTOS_sparrow: Lightweight rtos inspired by SKRTOS
http://www.pierceye.com/news/578992/

相关文章:

  • 做英文网站2014深圳网站设计g
  • 温州文成县高端网站设计做网站有生意吗
  • 网站开发说明书模板产品设计考研
  • seo网站排名优化软件京东 wordpress
  • 有些网站为什么可以做资讯微信小程序vr全景
  • 做网站的开发工具长春百度关键词优化
  • 网站建设所需人力网站制作的必备技巧有哪些
  • 上饶网站建设推广四川城乡建设网网站
  • 网站logo怎么改服装手机商城网站建设
  • aspnet网站开发实例视频天津网站建设普斯泰
  • 玉溪网站建设设计心理医院网站优化服务商
  • 支付宝网站接口申请建湖做网站哪家最好
  • 网站的超级链接怎么做无法运行电脑wordpress
  • 网站建设企业网银e路通西宁做网站_君博相约
  • 陕西网站建设公司哪有大连网站建设
  • 东莞做网站 汇卓百度网盘官网登录入口
  • 网站建设哪谷歌浏览器安卓版下载
  • 中国建设银行上海市分行网站天津工程建设信息网站
  • 怎么做好网站开发、设计中国站长网站
  • 沈阳网站建设tlmh室内设计装修案例
  • 网站 linux 服务器配置长沙企业网站建设价格
  • 低价网站制作企业智慧团建官网登录口手机版
  • 临沂网站制作专业如何 做网站
  • 旅游景区网站开发的政策可行性天翼云电脑免费领取
  • 企业网站建设报价做网站要实名认证吗
  • 设计网站得多少钱ui设计师个人简历
  • 彩票网站建设基本流程wordpress上篇下篇代码
  • 一站式服务的优点无锡网站搜索优化
  • 怎么做地区网站烟台网站建设首推企汇互联见效付款
  • 杭州网站优化服务网站内容方案