一直没有时间整理之前的笔记,现在打算每个星期花点时间整理一下,以存根

错误(Error)

php程序自身不能正常的执行,根据严重情况分为多种错误等级

  • 致命错误:语法、未定义调用(对象、函数)等,立即中断流程执行,属于程序严重bug,  必须立即修复
  • 其它错误:php执行未达预期的结果, 程序流程继续执行,潜在bug需要记录错误,并修复
  • 用户错误:使用trigger_error主动抛出,不中断程序执行流程

错误处理机制

  • 非致命错误:set_error_handle(error_function, error_types)
  • 致命错误:程序只能中止执行,在中止前可以通过 注册 register_shutdown_function, 使用 error_get_last获取相关错误信息,以便于记录查阅
  • 记录错误日志: 可以使用error_reporting来设置当前脚本的错误报告级别,在php.ini配置或通过ini_set()函数设置log_errors = on, error_log = LOG_FILE来记录错误日志

异常(Exception)

大多数应用于应用逻辑未达预期,中断当前业务流程处理,直到将流程控制权交给适合的错误处理者,利于程序多层结构,每层处理自己能处理的错误,避免各层对错误大量if判断处理的存在,便于程序将正常处理代码与错误处理代码进行分离

异常处理机制

  • 立即处理:在当前异常发生后立即处理,及时采取补救措施不影响业务逻辑的完整性, 比如为保证数据一至性等需求
  • 上层处理:处理当前层能处理的错误
  • 集中处理:最后一道处理异常的机会, 比如集中记录异常,显示错误信息提示,根据异常类型作出合适的跳转等,也可通过set_exception_handler()捕获未处理的异常

函数无阻塞测试

函数有阻塞测试

如果当前goroutine不发生阻塞,它是不会让出CPU给其他goroutine的, 所以例子一中的输出会是一个一个goroutine进行的,而sleep函数则阻塞掉了 当前goroutine, 当前goroutine主动让其他goroutine执行, 所以形成了逻辑上的并行, 也就是并发。

真正并行

runtime调度器

runtime调度器是个很神奇的东西,但是我真是但愿它不存在,我希望显式调度能更为自然些,多核处理默认开启。
关于runtime包几个函数:

  • Gosched 让出cpu
  • NumCPU 返回当前系统的CPU核数量
  • GOMAXPROCS 设置最大的可同时使用的CPU核数
  • Goexit 退出当前goroutine(但是defer语句会照常执行)

参考:
http://blog.csdn.net/kjfcpua/article/details/18265461

递归查找指定类型的文件

弄个函数