第一天:
CLR是怎样回收的:
1、每次遇见new都分配内存,首先计算字段所需要空间,对象所需空间,
包括同步索引块和类型对象指针,
2、遍历线程堆栈,标记有用的对象,把没用的弹出。
3、CLR分3代,第0代1代和2代。
4、CLR在刚开始初始化时,托管堆中没有任何对象,生成新对象时,放入0代
若0代满了,就会遍历线程堆栈,找不到引用的对象,就会从0代移除,把剩下的放入1代。
5、生成新的放入0代,满了放入1,若1代满了,会触发1代的垃圾回收,把没用对象回收,把剩下的放入2代。
重复这样的过程,就是CLR的垃圾回收。
第二天:
1、多线程
线程是操作系统分配处理器时间的基本单元,并且进程中可以有多个线程同时执行代码。
2、多线程的调用以及线程的阻塞
class Program
{
static Thread ThrTest1, ThrTest2;
static void Main(string[] args)
{
//多线程调用
//Thread t1 = new Thread(F1);
//Thread t2 = new Thread(F2);
//object[] oo = new object[] { 1, 2, 3, 4, 5, 6 };
//t1.Start(oo);
//t2.Start();
线程阻塞
ThreadStart TS1 = new ThreadStart(WriteLine1);
ThrTest1 = new Thread(TS1);
ThreadStart TS2 = new ThreadStart(WriteLine2);
ThrTest2 = new Thread(TS2);
ThrTest1.Start();
ThrTest2.Start();
}
public static void WriteLine1()
{
for (int i = 0; i < 20; i++)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(i.ToString() + "WriteLine1");
Thread.Sleep(500);
}
}
public static void WriteLine2()
{
for (int i = 0; i < 20; i++)
{
if (i == 10)
{
ThrTest1.Join();
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(i.ToString() + "WriteLine2");
Thread.Sleep(500);
}
}
//多线程的调用
//static void F1(object o)
//{
// int i = 0;
// foreach (object o1 in (object[])o)
// {
// Console.WriteLine(o1);
// Thread.Sleep(200);
// }
// while (i < 15)
// {
// Console.WriteLine("111111111111111");
// Thread.Sleep(200);
// i++;
// }
//}
//static void F2()
//{
// int i = 0;
// while (i < 15)
// {
// Console.WriteLine("222222222222222");
// Thread.Sleep(200);
// i++;
// }
//}
}
同步锁与线程的睡眠
public class BookShop
{
int num = 11;//共享资源
int i = 0;
int j = 0;
public void Sale()
{
while (num > 0)
{
lock (this)//同步控制
{
if (num > 0)
{ //卖书过程
Thread.Sleep(100);
num = num - 1;
Console.WriteLine( Thread.CurrentThread.Name+"售出一本");
if (Thread.CurrentThread.Name == "1号")
{
i++;
}
else
{
j++;
}
}
else
{
Console.WriteLine("没有了");
Console.WriteLine("一号售出{0}本,二号售出{1}本!",i,j);
if (i > j)
{
Console.ForegroundColor= ConsoleColor.Red;
Console.WriteLine("二号是特大笨笨!");
Console.ResetColor();
}
}
}
}
}
static void Main(string[] args)
{
BookShop a = new BookShop();
Thread t1 = new Thread(new ThreadStart(a.Sale));
Thread t2 = new Thread(new ThreadStart(a.Sale));
t1.Priority = ThreadPriority.Lowest;
t2.Priority = ThreadPriority.Highest;
t2.Name = "二号";
t1.Name = "一号";
t1.Start();
t2.Start();
}
}
3、TCP/IP
是Internet是基本的协议、Internet国际互联网络的基础。
是供已连接因特网的计算机进行通信的通信协议。
定义了设备如何连入因特网,以及数据如何在它们之间传输的标准。
IP—因特网协议,规定了信息的传输方法和传输路线。
TCP:对方发了一个数据包,你要发一个确认数据包给对方,通过这种确认来提供可靠性。