区别:
1.调度 :从上面的定义可以线程看出一个是任务调度调度的基本单位,进程是资源分配的基本单位
2.共享地址空间,资源:进程拥有各自独立的地址空间,资源,所以共享复杂,需要用IPC,同步简单; 线程共享所属进程的资源,共享简单,但同步复杂,要通过加锁等措施。
3.占用内存,cpu: 进程占用内存多,切换复杂,CPU利用率低; 线程占用内存少,切换简单,CPU利用率高。
4.相互影响: 进程间不会相互影响; 一个线程挂掉会导致整个进程挂掉。
六、数据库五范式?3NF(第三范式):必须先满足第二范式。非主键字段都与主键字段有直接依赖关系,不存在传递依赖。可以
理解为非主键字段只依赖主键字段,而不依赖其它的非主键字段。
比如员工表的字段构成为:员工id(主键),姓名,性别,年龄,所属部门,部门,部门经理姓名,部
门电话。 这里所有的非主键字段并不是直接依赖于主键“员工id”, 可以看到“部门经理姓名”和“部门电话”
这两个属性依赖于“所属部门”,而“所属部门”又依赖于主键“员工id”,这就是传递依赖,这里可将该员工表
的表结构改成:员工id(主键),姓名,性别,年龄,部门名称单独提出部门表结构为:部门名称(主键),
部门经理id ,部门电话
4NF(第四范式):必须先满足第三范式。简单来说就是将表中的多值属性拆分出来,分别建表。
比如在用户表中有一个非主键字段“电话号码”,某一行实例的“电话号码”内容可能是手机号码,
可能是座机号码,也可能是多个内容的直接组合(如“电影”属性中填“动作,喜剧,科幻”), 这
就是多值属性。
七、 操作系统内存分配策略*快速排序,时间复杂度O(Nlog(N)),算法不稳定 */
int partition(vector <int> &arr, const int left, const int right)
{
int temp = arr[left];
while(left < right)
{
while(left<right && arr[right] > temp)
{
rigth --;
}
arr[left] = arr[right];
while(left<right && arr[left] < temp)
{
left++;
}
arr[right] = arr[left];
}
arr[left] = temp;
return left;
}
void QWuick_sort(vector <int> &arr, const int left, const int right)
{
if(left < right)
{
int paviot = partition(arr,left,right);
QWuick_sort(arr,left,paviot-1);
QWuick_sort(arr,paviot+1,right);
}
}
十、 红黑树